如何确保聊天室成功? (instance.connection.muc.leave())

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确保聊天室成功? (instance.connection.muc.leave())相关的知识,希望对你有一定的参考价值。

在这里,我发现有一个能够将回调添加为leave方法的第三个参数:https://github.com/metajack/strophejs-plugins/blob/96da306f5394b901e190a3f7365fbbb676fddb51/muc/strophe.muc.js#L117

但它不起作用。如何在instance.connection.muc.leave()方法中添加回调或其他内容以确保聊天室成功保留?也许有更多方法可以确保我们离开了聊天室?

function handler_cb() {
  console.log('>>>>>>>>> leave was successfull');
}
function leaveChat() {
  instance.connection.muc.leave(room, nick, handler_cb);
}
答案

我认为插件本身有一个错误

他们使用presenceid(节id)属性来匹配来自服务器https://github.com/metajack/strophejs-plugins/blob/master/muc/strophe.muc.js#L146的响应

但并非所有服务器都在存在中使用节id。实际上在XEP-0045退出存在中没有任何关于存在ID的信息,因此一些服务器可能实现ID回显逻辑,但大部分都没有(并且看起来也像您的XMPP服务器)

所以我建议你自己设置这个标题,没有'presenceid':

function leaveChat() {
  instance.connection.addHandler(leaveCallback, null, "presence", "unavailable");
  instance.connection.muc.leave(room, nick);
}

function leaveCallback() {
  console.log('>>>>>>>>> leave was successfull');
  instance.connection.deleteHandler(leaveCallback);
}

以上是关于如何确保聊天室成功? (instance.connection.muc.leave())的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android系统下开发一个聊天软件?

RabbitMQ 高可用之如何确保消息成功消费

RabbitMQ 高可用之如何确保消息成功消费

如何确保 strtol() 已成功返回?

MongoDB - 如何确保多次更新都成功?

如何确保查询成功执行