java+smack+openfire即时通讯Im(五)
- 前端发送群聊消息
- 前端加入群聊
前端发送群聊消息
后端新建群聊以及添加群成员成功以后,前端就可以开始聊天了:
// 创建一个<message>元素并发送var msg = $msg({to: toAccount,from: localAccount,type: 'groupchat'}).c("body", null, val);connection.send(msg.tree());
其实跟单聊的时候是一样的,只不过是吧聊天类型(type)改成了群聊(groupchat),接收群聊消息跟单聊同理。只不过这里有个地方需要注意,群聊的时候,比如A发送了一条消息,这个时候A的接收方法里面会接收到两次同样的消息(一条是A发送给群聊的,另外一条是群聊发送给所有群成员的)。解决办法是,接收到的两条消息对象里面的from是不一样的,只需要针对群聊的类型进行过滤,通过from来去掉多余的一条信息即可。
前端加入群聊
/*** 加入群聊* @param msg 接收到的xml格式的文本内容*/
function joinGroupChat(groupId) {var group = groupId;var m = window.$pres ( {from: localName,to: group +"/"+localName} ).c ('x',{xmlns: 'http://jabber.org/protocol/muc'}).tree () ;connection.send(m) ;
}
前端加入群聊,只需要向服务器群组管理发送一条消息即可,将群聊的发送对象设置成id+"/要加入的成员账号",这样就成员就可以加入群组。
针对账号退出自动退出群聊的问题,我是这样解决的,每次创建群聊和拉人进群的时候,将群聊的ID以及成员的ID存入本地数据库,然后每次前端登录的时候都去查询一遍当前用户的所有群聊列表,遍历,前端调用加群的方法挨个加入群聊(在连接状态回调方法里面判断,只要连接成功都遍历一遍群组信息,然后加群)。
上一篇:java+smack+openfire即时通讯Im(四)