Strophe.js MUC:创建一个房间并加入多个房间

时间:2013-12-16 13:24:33

标签: javascript strophe

我正在创建一个聊天网站,我正在使用Strophe.js和Strophe.muc.js插件。单个聊天功能工作正常,但我也不想实现群聊功能,用户可以创建房间并邀请其他用户到他们的房间。使用muc插件,我可以创建一个房间,但问题是,直到我不配置它(我猜),其他用户无法加入,房间不持久。我知道muc插件有配置方法,但我不知道如何创建配置Form对象,我不知道它应该怎么样。这将是我的第一个问题。 第二:我有可能加入一个以上的房间并从我所在的所有房间收到消息吗?如果没有,那么就没有必要回答我的第一个问题......

2 个答案:

答案 0 :(得分:5)

  1. 您可以在jabber服务器上默认将房间设置为持久性。
  2. 创建房间是一个两步过程。首先创建房间,然后配置房间。
  3. 您可以加入任意数量的房间。
  4. 房间配置就像(如果您检查来自服务器的响应,您将在可用字段的第一步获得表单)。

    第二步看起来像:

    var iq, stanza;
    iq = $iq({
        to: newroomjid,
        type: "set"
    }).c("query", {
        xmlns: Strophe.NS.MUC_OWNER
    });
    iq.c("x", {
        xmlns: "jabber:x:data",
        type: "submit"
    });
    iq.c('field', { 'var': 'FORM_TYPE' }).c('value').t('http://jabber.org/protocol/muc#roomconfig').up().up();
    iq.c('field', { 'var': 'muc#roomconfig_roomname' }).c('value').t(roomName).up().up();
    stanza = iq.tree();
    

答案 1 :(得分:5)

在尝试了Mark S'解决方案,我发现我必须首先发送存在来创建房间。我列出了下面的整个代码,希望这会有所帮助。

//before executing the code below, you need to connect to IM server (var conn is Strophe.Connection)
var userName = "steve",
    serverName = "example.com",
    userJid = userName + '@' + serverName,
    roomJid = 'testRoom' + '@conference.' + serverName,
    iq;

//send presence first for creating room
var d = $pres({'from': userJid, 'to': roomJid + '/' + userName})
conn.send(d.tree());

iq = $iq({
    to: roomJid,
    type: 'set'
}).c("query", {
    xmlns: Strophe.NS.MUC_OWNER
});
iq.c("x", {
    xmlns: "jabber:x:data",
    type: "submit"
});

//send configuration you want
iq.c('field', { 'var': 'FORM_TYPE' }).c('value').t('http://jabber.org/protocol/muc#roomconfig').up().up();
iq.c('field', { 'var': 'muc#roomconfig_publicroom' }).c('value').t('1').up().up();

conn.sendIQ(iq.tree(), function () { console.log('success'); }, function (err) { console.log('error', err); });

我发现如果我没有发送任何配置,那么openfire的即时消息服务器只会将房间写入缓存,而不是数据库,因此重启Instant Message服务器后房间就会消失。