找了半天库,总算从一个角度里找到一个日本公司开发的库算不错,msnm.rb
地址在这里:
[url]http://zerobase.jp/blog/entry-213.html[/url]
日文的,不过我猜了一下,下载了代码,是GPL协议的。附件里也可以下载。
一个大文件,不过也不算复杂,其他的是样例,代码很简单。
那么怎么整合进去呢,首先是引用
然后必须定义一个handler来处理消息接受和发送
其中,Robot.process_command是真正处理命令的地方,处理方法跟xmpp一样。
handle_message( peer_id, peer_nick, msg_header, msg_body )这个函数很好理解,peer_id就是email, peer_nick就是呢称,msn_header是一个类似http的返回头,msg_body就是消息本身了。
再启动连接:
帐号信息从msn_account.yml中取出来
[code]
default_account:
login_user: whereisit@live.com
password: password
[/code]
MSNMessenger就是缩短的定义,在前面定义过了。
MSNSessionHandlerFactory这个工厂也在前面定义过了,是真正处理消息的地方。
@@msnm.ns.online 这样就上线了。
非常简单。
地址在这里:
[url]http://zerobase.jp/blog/entry-213.html[/url]
日文的,不过我猜了一下,下载了代码,是GPL协议的。附件里也可以下载。
一个大文件,不过也不算复杂,其他的是样例,代码很简单。
那么怎么整合进去呢,首先是引用
require "lib/msnm.rb"
.........
MSNMessenger = Net::InstantMessaging::MSNMessenger
.........
然后必须定义一个handler来处理消息接受和发送
class MSNSessionHandler < MSNMessenger::SessionHandler
def handle_message( peer_id, peer_nick, msg_header, msg_body )
if msg_header =~ /\r\nContent-Type: text\/plain/um
begin
queue_message(Robot.process_command(msg_body,peer_id))
rescue => detail
exception_log("process_command error:",detail)
end
end
end
def on_join( peer_id, peer_nick )
queue_message( 'hello ' + peer_id)
end
end
class MSNSessionHandlerFactory # Factory
def create( msnm, session )
MSNSessionHandler.new( msnm, session )
end
end
其中,Robot.process_command是真正处理命令的地方,处理方法跟xmpp一样。
handle_message( peer_id, peer_nick, msg_header, msg_body )这个函数很好理解,peer_id就是email, peer_nick就是呢称,msn_header是一个类似http的返回头,msg_body就是消息本身了。
再启动连接:
def self.connect_msn
ac=YAML.load_file("config/msn_account.yml")["default_account"]
@@msnm = MSNMessenger.new( ac["login_user"], ac["password"], MSNSessionHandlerFactory.new )
@@msnm.ns.synchronize
@@msnm.ns.online
end
帐号信息从msn_account.yml中取出来
[code]
default_account:
login_user: whereisit@live.com
password: password
[/code]
MSNMessenger就是缩短的定义,在前面定义过了。
MSNSessionHandlerFactory这个工厂也在前面定义过了,是真正处理消息的地方。
@@msnm.ns.online 这样就上线了。
非常简单。