node-xmpp ---创建持久和私人聊天室

时间:2013-12-25 00:15:04

标签: node.js node-xmpp

我需要通过Node动态创建一个私有和持久聊天室,它不会自动删除。

我在网上搜索过,找不到怎么做的。这是我用来创建聊天室的代码片段:

var cl = new xmpp.Client({
    jid: jabber_creds.jid,
    password: jabber_creds.password,
    host: jabber_creds.host,
    port: jabber_creds.port
});


cl.on('online', function() {
    var room_jid = jabber_creds.room_jid.replace("%s", chatRoomName);
    // join room (and request no chat history)
    cl.send(new xmpp.Element('presence', { to: room_jid }).
        c('x', { xmlns: 'http://jabber.org/protocol/muc' })
    );

    // create room
    cl.send(new xmpp.Element('iq', { to: room_jid, id: 'create', type: 'set' }).
        c('query', { xmlns: 'http://jabber.org/protocol/muc#owner' }).
        c('x', { xmlns: 'jabber:x:data',type: 'submit' })
    );
});

3 个答案:

答案 0 :(得分:0)

聊天室持久性在服务器而非客户端处理。是的,客户端可以请求服务器保留在聊天室中,但您实际上无法从客户端保留它。请查看您使用的服务器文档,以确保它支持此功能。

答案 1 :(得分:0)

尝试关注XEP-0045

http://xmpp.org/extensions/xep-0045.html#createroom

只需阅读创建和配置此类会议室的工作流程如下部分

你需要做下一个:

  1. 将第一次出席发送到新房间
  2. 服务器会返回一些房间已创建的消息,但您应该将其解锁
  3. 您应该创建配置表单并发送到服务器。在此表单中,您可以设置'持久'类型& '只有会员'类型
  4. 如果一切正常,服务器将返回您的成功结果

答案 2 :(得分:0)

您可以参考https://github.com/node-xmpp/node-xmpp/blob/master/examples/create_room.js并通过XEP-0045发送您想要的配置

//create_room.js
'use strict'

var xmpp = require('../index')
    ,argv = process.argv

if (argv.length < 5) {
    console.error('Usage: node create_room.js <my-jid> <my-password> <room-name>')
    process.exit(1)
}

var cl = new xmpp.Client({ jid: argv[2],  password: argv[3] })

cl.on('online', function(data) {
    var userJid = data.jid.user + '@' + data.jid.domain,
        roomJid = argv[4] + '@conference.' + data.jid.domain,
        pres,
        iq

    console.log('Connected as ' + userJid + '/' + data.jid.resource)

    console.log('Create room - ' + argv[4])

    pres = new xmpp.Element(
        'presence',
        { from: userJid, to: roomJid + '/' + data.jid.user })
        .c('x', {'xmlns':'http://jabber.org/protocol/muc'})

    cl.send(pres.tree())

    iq = new xmpp.Element(
        'iq',
        { to: roomJid, type: 'set' })
    .c('query', { xmlns: 'http://jabber.org/protocol/muc#owner' })
    .c('x', { xmlns: "jabber:x:data", type: "submit"})
    //set room to be hidden by sending configuration. ref: http://xmpp.org/extensions/xep-0045.html
    iq.c('field', { 'var': 'FORM_TYPE' })
    .c('value').t('http://jabber.org/protocol/muc#roomconfig').up().up()
    .c('field', { 'var': 'muc#roomconfig_publicroom'})
    .c('value').t('0').up().up()

    cl.send(iq.tree())

    // exit later for sending configuration done
    setTimeout(function() {
        cl.end()
    }, 100)

})

cl.on('error', function(e) {
    console.error(e)
    process.exit(1)
})