Я создаю веб-сайт чата и использую Strophe.js и плагин Strophe.muc.js. Функции одиночного чата работают нормально, но я также не хочу реализовывать функцию группового чата, где пользователи могут создавать комнаты и приглашать других пользователей в свою комнату. Используя плагин muc, я могу создать комнату, но проблема в том, что пока я ее не настрою (наверное), другие пользователи не смогут присоединиться, и комната не будет постоянной. Я знаю, что у плагина muc есть методы настройки, но я не знаю, как создать объект формы конфигурации, я понятия не имею, как он должен выглядеть. Это будет моя первая проблема. Во-вторых: возможно ли, что я присоединяюсь более чем к одной комнате и получаю сообщения от всех комнат, в которых я нахожусь? Если нет, то нет нужды давать мне ответ на мой первый вопрос...
Strophe.js MUC: создание комнаты и объединение нескольких комнат
Ответы (2)
- Вы можете сделать комнаты постоянными по умолчанию на вашем jabber-сервере.
- Создание комнат — это двухэтапный процесс. Сначала создайте комнату, затем настройте комнату.
- Вы можете присоединиться к любому количеству комнат.
Конфигурация комнаты похожа (вы получите форму на первом шаге доступных полей, если вы проверите ответ от сервера).
2-й шаг выглядит так:
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();
person
Mark S
schedule
16.12.2013
Спасибо за ваш ответ, но это не сработало, а также я хотел бы использовать методы, предоставленные Strophe.muc.js: настроить, сохранить конфигурацию.
- person Hampel Előd; 16.12.2013
Они не работали для меня, поэтому выше. Я ходил вокруг них некоторое время. Вы получили сообщение об ошибке?
- person Mark S; 16.12.2013
О, и вы можете создать комнату, просто присоединившись к ней. Конфигурация сложная.
- person Mark S; 16.12.2013
Да, я получил сообщение об ошибке: ReferenceError: Форма не определена. Эта форма находится внутри метода saveConfiguration: if (config instanceof Form)
- person Hampel Előd; 16.12.2013
Та же проблема была, поэтому я создал свою собственную строфу. Вы получили ошибку, когда попробовали приведенный мной пример строфы?
- person Mark S; 16.12.2013
Спасибо, я попробовал еще раз, и теперь он работает с вашей строфой: D
- person Hampel Előd; 17.12.2013
Теперь у меня есть еще один вопрос: как мне отправлять и обрабатывать входящие сообщения группового чата? Прежде всего, правильно ли выглядит следующая последовательность действий: я создаю комнату, используя метод соединения strophe.muc (connection.muc.join(roomname, псевдоним, onGroupMessage, onGroupPresence)) -> я создаю предоставленную вами строфу -> я пришлите IQ -> я приглашаю несколько человек. Когда они принимают приглашение, они отправляют обратно сообщение группового чата (используя функцию сообщения strophe.muc), информируя меня о том, что они сейчас в комнате, но моя функция onGroupMessage не срабатывает.
- person Hampel Előd; 17.12.2013
Если я правильно понял ваш вопрос, попробуйте этот обработчик: connection.addHandler(onInvite, 'jabber:x:conference'). Сообщение, отправленное обратно, не имеет типа.
- person Mark S; 17.12.2013
Нет, это у меня уже есть. Это обработчик приглашения. Мне нужен отправитель и получатель сообщений группового чата (обработчик сообщений группового чата).
- person Hampel Előd; 17.12.2013
для отправки: connection.send($msg({ to: toJid, from: connection.jid, type: 'groupchat' }).c('body').t(txt)), для обработки: addHandler(onMsg, null , «сообщение», «групповой чат»)
- person Mark S; 17.12.2013
Попробовав решение 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, записывает только комнату в кеш, а не в базу данных, поэтому комната исчезнет после перезапуска сервера мгновенных сообщений.
person
gunblues
schedule
08.08.2014