java+smack+openfire即时通讯Im(五)

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(四)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值