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

时间:2018-09-05 13:04:34

标签: websocket xmpp multiuserchat strophe.js

在这里,我发现可以将回调作为第三个参数添加到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);
}

1 个答案:

答案 0 :(得分:1)

我认为插件本身有错误

他们使用 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);
}