废话少说。接上回。
由上回的一个应声虫机器人的例子,我们初步了解到jMSN开发包的基本用法,我先画一个它的工作原理图给大家:
中客科技信息有限公司信息监控系统提醒您:很抱歉,由于您提交的内容中或访问的内容中含有系统不允许的关键词或者您的IP受到了访问限制,本次操作无效,系统已记录您的IP及您提交的所有数据。请注意,不要提交任何违反国家规定的内容!本次拦截的相关信息为:监听器慢长的过程,它要与服务器通讯,要等待服务器返回回应信息。而处理器在后台做这些事情,做完后,它会通过你注册在MSNMessenger类中的MSNListener监听器通知你。
所以不要试者一连串的执行MSNMessenger中提供某些方法(主要是指前面提到的那些类似方法),你应该在自己的监听器中等待事件完成后的通知你后再执行相应命令。
MSNListener是一个接口,提供了多达28种事件通知方法。包括登入完成,好友上线或离线,开始会话或结束会话,收到新消息, 有谁添加自己为好友等事件。
这次的说教就到这。最后我们来改进一下上次的应声虫程序,让它可以在某人上线后主动发一个消息给他打招呼(不然谁知道你是个应声虫:D)。
代码别的地方都一样,只是在YesmanRobotAdapter新实现了两个方法:
/** * 好友上线时开始与其对话。 */ public void userOnline(MSNFriend friend) { try { System.out.println("开始邀请"+friend.getLoginName()+"会话"); MSN.doCall(friend.getLoginName());
} catch (IOException e) { // TODO 处理异常 e.printStackTrace(); } }
/** * 会话开始。 */ public void switchboardSessionStarted( SwitchboardSession ss ) { try {
if ( ss==null ) return; String toFriend = ss.getMSNFriend().getLoginName();
if ( MSN.findSwitchboardSession(toFriend)!=null ) { MimeMessage msg = new MimeMessage("你好,这是MSN应声虫机器人自动与你通话。欢迎提问"); msg.setKind(MimeMessage.KIND_MESSAGE); boolean success = MSN.sendMessage(toFriend, msg); if ( success ) System.out.println("打完招呼."); }
} catch (IOException ex) { // TODO 处理异常 ex.printStackTrace(); } }
在这里,首先在用户上线的事件通知userOnline里调用了doCall方法。doCall方法是开始与友人的通讯。这时候还不能马上向其发消息,要等到会议开始之后,所以又实现了一个switchboardSessionStarted。当会话开始后,我们的机器人就可以在你上线的时候主动发出问题了。
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>