`
outlaw
  • 浏览: 30634 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

利用JML方便扩展MSN应用-java

阅读更多

JML 简单的MSN 机器人

文章分类:Java编程

http://kenter1643.iteye.com/blog/306649 的资料给了极大的帮助

 

1 JML 下载地址:http://sourceforge.net/projects/java-jml/

2 JML 相关地址:http://sourceforge.net/apps/trac/java-jml

3 代码. 请注意 173,174,175行.为指定用户发送消息.和之前代码78行多了窗口关闭。

 
package com.isw2.msn;

import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.jml.MsnContact;
import net.sf.jml.MsnList;
import net.sf.jml.MsnMessenger;
import net.sf.jml.MsnProtocol;
import net.sf.jml.MsnSwitchboard;
import net.sf.jml.MsnUserStatus;
import net.sf.jml.event.MsnAdapter;
import net.sf.jml.impl.MsnContactImpl;
import net.sf.jml.impl.MsnMessengerFactory;
import net.sf.jml.message.MsnControlMessage;
import net.sf.jml.message.MsnDatacastMessage;
import net.sf.jml.message.MsnInstantMessage;
import net.sf.jml.message.MsnSystemMessage;
import net.sf.jml.message.MsnUnknownMessage;

/**
 * @author isw2 zx
 */
public class Msntest extends MsnAdapter {

	private MsnMessenger messenger = null;
	private String email = null, password = null;

	/** Creates a new instance of Msntest */
	public Msntest() {
	}

	public static void main(String args[]) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException {
		Msntest msn = (Msntest) Class.forName("com.isw2.msn.Msntest")
				.newInstance();// 创建类实例
		msn.setEmail("zhouxianglh@gmail.com");// 设置登录用户
		msn.setPassword("123456");// 设置密码
		msn.start();
	}

	// 打印信息
	private static void msg(Object obj) {
		SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");
		if (obj instanceof Throwable) {
			System.err.println("[" + sdf.format(new Date()) + "] " + obj);
		} else {
			System.out.println("[" + sdf.format(new Date()) + "] " + obj);
		}
	}

	private void start() {
		messenger = MsnMessengerFactory.createMsnMessenger(email, password);// 创建MsnMessenger
		messenger
				.setSupportedProtocol(new MsnProtocol[] { MsnProtocol.MSNP12 });// 设置登录协议
		messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);// 设置用户状态
		messenger.addListener(this);// 注册事件
		messenger.login();// 登录

	}

	// 收到正常信息的时候发生
	@Override
	public void instantMessageReceived(MsnSwitchboard switchboard,
			MsnInstantMessage message, MsnContact contact) {
		System.out.println(switchboard.getClass());
		msg(contact.getDisplayName() + "对我说:" + message.getContent());
		// 如果聊天内容为exit,退出
		if (message.getContent().trim().equalsIgnoreCase("exit")) {
			msg(contact.getDisplayName() + "对我发出退出指令。");
			messenger.logout();
			System.exit(0);
		}
		message.setDisplayName("isw2 msn");//信息发送者昵称
		message.setContent("当前时用户" + contact.getEmail());// 设置要发送消息内容
		message.setFontRGBColor((int) (Math.random() * 255 * 255 * 255));// 设置消息的文本颜色
		messenger.getOwner().setDisplayName("isw2 msn online");//聊天框标题
		switchboard.sendMessage(message);// 发送信息
		switchboard.close();// 关闭对话框
	}

	// 收到系统信息的时候发生,登录时
	@Override
	public void systemMessageReceived(MsnMessenger messenger,
			MsnSystemMessage message) {
		// msg(messenger + " recv system message " + message);
	}

	// 当在联系人聊天窗口获得光标并按下第一个键时发生
	@Override
	public void controlMessageReceived(MsnSwitchboard switchboard,
			MsnControlMessage message, MsnContact contact) {
		msg(contact.getFriendlyName() + "正在输入文字。");
	}

	// 异常时发生
	@Override
	public void exceptionCaught(MsnMessenger messenger, Throwable throwable) {
		msg(messenger + throwable.toString());
		msg(throwable);
	}

	// 登录完成时发生
	@Override
	public void loginCompleted(MsnMessenger messenger) {
		msg(messenger.getOwner().getDisplayName() + "登录成功!");
	}

	// 注销时发生
	@Override
	public void logout(MsnMessenger messenger) {
		msg(messenger + " logout");
	}

	// 收到系统广播信息时发生
	@Override
	public void datacastMessageReceived(MsnSwitchboard switchboard,
			MsnDatacastMessage message, MsnContact friend) {
		msg(switchboard + " recv datacast message " + message);
		switchboard.sendMessage(message, false);
	}

	// 收到目前不能处理的信息时发生
	@Override
	public void unknownMessageReceived(MsnSwitchboard switchboard,
			MsnUnknownMessage message, MsnContact friend) {
		// msg(switchboard + " recv unknown message " + message);
	}

	@Override
	public void contactListInitCompleted(MsnMessenger messenger) {
		listContacts();
	}

	/**
	 * 更新好友列表完成时发生
	 */
	@Override
	public void contactListSyncCompleted(MsnMessenger messenger) {
		listContacts();
	}

	/**
	 * 关闭一个聊天窗口时发生
	 */
	@Override
	public void switchboardClosed(MsnSwitchboard switchboard) {
		msg("switchboardStarted " + switchboard);
	}

	/**
	 * 打开一个聊天窗口时发生
	 */
	@Override
	public void switchboardStarted(MsnSwitchboard switchboard) {
		msg("switchboardStarted " + switchboard);
	}

	// 打印联系人
	private void listContacts() {
		MsnContact[] cons = messenger.getContactList().getContactsInList(
				MsnList.AL);
		if (cons.length == 0) {
			msg("空");
		} else {
			msg("你现在有" + cons.length + "个联系人");
		}
		for (int i = 0; i < cons.length; i++) {
			String personal = ((MsnContactImpl) cons[i]).getPersonalMessage()
					.equals("") ? "空" : ((MsnContactImpl) cons[i])
					.getPersonalMessage();
			msg(cons[i].getDisplayName() + " " + cons[i].getEmail() + " "
					+ cons[i].getStatus() + " " + personal);
			if (cons[i].getStatus().equals(MsnUserStatus.ONLINE)) {//给在线好友发送消息
				messenger.getOwner().setDisplayName("isw2 msn");
				messenger.sendText(cons[i].getEmail(), "你好,isw2 msn上线了");
			}
		}
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

  testMSN\lib  下面除了 Jar 包,还有源代码,里面有API 说明.

分享到:
评论

相关推荐

    JML19-G070-V10104-221212

    标题 "JML19-G070-V10104-221212" 和描述 "JML19_G070_V10104_221212" 提供的信息可能代表一个软件版本或项目代码,其中的组成部分可能依次代表项目名、模块编号、版本号和日期。这种格式常见于软件开发中,用于追踪...

    jml-src-1.0b4

    "jml-src-1.0b4" 是一个开源项目,其主要目的是提供Java语言对MSN Messenger服务的接口和操作支持。这个项目的源代码库包含了多个目录,每个目录都有特定的功能和用途,使得开发者能够更好地理解和使用这个库来构建...

    JML 简单的MSN 机器人

    2. **JML(Java Messenger Library)**:JML是基于Java语言实现的MSN Messenger客户端库,它提供了对MSN Messenger服务的接口,使得开发者能够用Java编程语言来创建自定义的MSNMessenger客户端,例如机器人。...

    Jml插件获取MSN好友列表

    总结来说,Jml插件是一个帮助开发者获取和管理MSN好友列表的工具,它基于Java语言,利用MSN的通讯协议进行工作。通过学习和使用Jml,开发者不仅可以掌握网络编程和协议解析的基本技能,还能了解到如何通过开源项目...

    OpenJUMP-Installer-1.16-r6669-PLUS-Java 统一制图平台.exe

    OpenJUMP 试点项目-Java 统一制图平台 OpenJUMP 是“Java 统一制图平台”GIS 软件 JUMP 的社区驱动分支。最初的 JUMP 由 Vivid Solutions 开发,于 2003 年在 GPL2 下发布 特征 矢量 GIS(也可以读取栅格) 提供...

    用JML实现的一个MSN客户端一

    通过这个项目,开发者可以学习到如何利用JML库构建实际的应用,理解MSN协议的工作原理,以及如何将Java编程技术应用于即时通讯领域。同时,通过阅读和研究源码,也可以提升对网络编程、多线程、XML解析等相关技术的...

    jml-0.9.3.zip

    首先,"jml-0.9.3.zip"这个压缩包中包含的JML全称为Java Message Library,它是一个旨在简化JMS(Java Message Service)消息路由和转换的库。JMS是Java平台上的一个标准接口,用于在分布式环境中进行异步通信。通过...

    msn.rar_jml ms_msn_msn robot ja_robot java_邀请

    java实现的msn机器人,可以自动应答,主动邀请,主动接受邀请。函数库实现msn所有功能

    用JAVA实现MSN Messenger的功能.doc

    2. **JML库**:基础库文件,例如`jml-1.0b4.jar`,用于处理MSN Messenger的通信。 3. **官方example文件**:提供更多的示例代码,帮助开发者理解如何使用JML,存储在`example.zip`中。 4. **第三方库**:JML库还需要...

    Java MSN 实现msn发信息

    java msn 实现接口jar包 Java MSN 实现msn发信息

    Java Modeling Language (JML)-开源

    `OpenJMLUserGuide.pdf`和`jml-reference-manual.pdf`可能是用户指南和参考手册,帮助开发者更好地理解如何使用JML和OpenJML工具。 6. **多平台兼容**:`Solvers-windows`表明OpenJML支持不同的操作系统,例如...

    java msn 机器人 带界面

    JavaMSN机器人是一个基于Java语言开发的应用程序,它利用JML(Java Messenger Library)库来实现与MSN即时通讯服务的交互。这个系统具有图形用户界面,能够实现自动化聊天功能,为用户提供了一个便捷的方式来模拟...

    使用java导入某个msn帐号的好友列表并发送消息

    此外,还需要将`jml-1.0b-full.jar`和其他三个支持包引入项目中。 #### 三、实现导入好友列表及发送消息功能 接下来,我们将详细介绍如何使用JML来实现导入指定MSN账号的好友列表,并通过该账号发送消息的功能。 ...

    matlab多元参数非线性回归模型代码-JML:JML是用Java编写的机器学习库,它是纯Java包,因此是跨平台的。JML的目标是使机器学习

    6. **JML-master文件夹**:这个文件名可能表示的是JML库的源码主分支。用户可以下载并研究这些源代码,了解JML如何实现各种机器学习算法,包括可能的非线性回归方法。 通过理解和掌握这些知识点,不仅可以深入理解...

Global site tag (gtag.js) - Google Analytics