解决xmpp4r会自动断线的问题

使用xmpp4r连接gmail的时候,时间长了就会断,因为我只加了一个message callback,所以如果长时间空闲,则没有任何消息发过去。可能就是因为这个服务器才会断开的。

所以要定时发一个在线信息过去,这样肯定不会自动断线了。

在主函数start里:

def self.start
init_all()
t=Time.now
while true
#per 2 mins
sleep(1)
if Time.now - t > 120
set_online_xmpp_with_retry_login(@@xmpp_conn)
set_online_msn_with_retry_login(@@msnm)
t=Time.now
end
end
end


定时2分钟去发一个在线信息,这样服务器始终认为在线,就可以正常收到消息了。

发送在线信息:

def self.set_online_xmpp_with_retry_login(j)
begin
p=Jabber::Presence.new(:chat)
j.send(p)
Robot.debug_log("set online for xmpp")
rescue => detail
Robot.exception_log("set online error:",detail)
begin
connect_xmpp()
Robot.debug_log("reconnected for xmpp")
rescue => detail
Robot.exception_log("reconnect failed, please restart. error:",detail)
end
end
end


如果发送遇到异常,就尝试重新连接。


处理消息也加强了一些异常处理:

j.add_message_callback do |m|
begin
if m!=nil && m.body!=nil && !m.body.empty?
email=Robot.split_email(m.from)
msg_text=Robot.process_command(m.body,email)
return_msg=Jabber::Message::new(m.from,msg_text)
return_msg.type=m.type
@@xmpp_conn.send(return_msg)
end
rescue => detail
Robot.exception_log("process_command error:",detail)
end
end


传递的参数m有可能为nil,所以一定要检查一下。

全部源码在:http://code.google.com/p/whereisitcn/
功能很简单,是一个存储东西摆放位置的机器人。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值