前两个星期,公司的事太多。只能偷闲整理一点,终于今天有了个初步的成果。
jmsn robots(Version 1.0.0)使用说明
1 特性说明
(1) 支持启动多个机器人
(2) 提供简单的数据库连接池,考虑到机器人需要同时为多个用户服务,数据库访问需要池化
(3) 一个工作线程池,同时有多个用户和机器人对话,需要提高并发的响应能力,同时又不能无限制的开启新的线程,导致系统资源被消耗光
(4) 自己开发响应内容程序
2 运行环境
需要 jre 1.4.1.2以上
3 安装及目录基本说明
[bin]\run.bat运行。jmsn robots的classpath设置就在该文件中
[lib]目录包括了,必要的运行库。msnm1-2-0b2.jar就是jmsnlib库,我修改了源代码,添加了定时ping notification sever的功能,解决了nat设备会自动cut 空闲的连接,导致机器人自己下线。
[config]目录,存放了配置文件。robots.xml是机器人的配置文件,不用多说,大家一看就明白了。cn_pool.xml是数据库连接池的配置文件,主要是为了你自己开发的机器人对话处理程序时,需要访问数据库的时候用到,当然,你也可以自己用其他的连接池。cn_pool.sam是个例子。
4 配置文件说明
(1) [bin]目录下的config.properties,请大家根据实际情况修改。目前参数很简单,说明如下:
jmsn_robot_home=C:\\JMSNRobots-1.0.0-a 系统的主目录(请注意\\)
connection_pool_enabled=false 是否需要connection pool,如果设为true,就按照connection_pool_config_file文件读取配置
thread_process=20 线程工作池的容量
robot_config_file=robots.xml 机器人配置文件
connection_pool_config_file=cn_pool.xml 数据库连接池的配置文件
(2) [config]目录下robots.xml机器人配置文件
<JMSNRobot>
<ROBOT id="1" loginname="" password="" robot_name="" service="org.enhydraboy.msnrobots.SampleRobot"/>
</JMSNRobot>
大家一看就明白,就不用多说了
(3) [config]目录下cn_pool.sam,很简单,一看就明白
5 如何开发自己的机器人内容处理程序
(1) 开发内容处理代码
其实很简单,只需要继承一个接口就行了。这个接口是org.enhydraboy.jmsnrobot.develop.commandDispatcher。本系统会把接收到的消息,存放在一个MSNInputMessage的类当中,getMsgbody()就可以得到发送给你的消息内容,注意,消息内容是JAVA缺省的iso-8859编码的。getSender()可以得到发送者的email address。
下面是一段简单的代码
package org.enhydraboy.msnrobots;
import org.enhydraboy.jmsnrobot.develop.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/
public class SampleRobot extends commandDispatcher {
public SampleRobot() {
}
public String ProcessCommand(MSNInputMessage msg) {
String ret="";
if(msg.getMsgbody().toLowerCase().equals("hello")){
ret="hello "+msg.getFriendlyName();
ret=ret+"your email is "+msg.getSender();
}
return ret;
}
}
(2) 部署。修改robots.xml,其中的service="org.enhydraboy.msnrobots.SampleRobot",大家应该明白了吧
(3) 连接池的使用。
ConnectionFactory cf=ConnectionFactory.getInstance();
DataSource ds=null;
try{
ds=cf.lookup("Sybase"); //获得一个数据源
}catch(Exception e){
e.printStackTrace();
}
Connection conn=ds.getConnection(); //获得一个连接
.....
conn.close //交回连接池
这只是本人的兴趣,花了一点时间,整理了一下,主要为了方便大家编写自己msn机器人的方便
,同时感谢开放源码的jmsnlib类库,可以说,我只是在他的基础上,作了一小点工作而已。
大家可以同我联系。。。。
enhydraboy@yahoo.com.cn
2004