我需要通过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' })
);
});
答案 0 :(得分:0)
聊天室持久性在服务器而非客户端处理。是的,客户端可以请求服务器保留在聊天室中,但您实际上无法从客户端保留它。请查看您使用的服务器文档,以确保它支持此功能。
答案 1 :(得分:0)
尝试关注XEP-0045
http://xmpp.org/extensions/xep-0045.html#createroom
只需阅读创建和配置此类会议室的工作流程如下部分
你需要做下一个:
答案 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)
})