我收到的消息看起来像这样......
<message
from='pinza@some.com'
to='tulyar@some.com'
type='groupchat'
xmlns='jabber:message:group_chat_test'>
<body>Here is my message.</body>
</message>
在我的routes.js文件中,我正在尝试根据正文内容之外的其他内容路由消息 - 特别是我想根据自定义命名空间路由它(所以我可以使用不同的groupchat消息类型由不同的控制器处理)所以我试试这个...
bind.query('message[type="groupchat"][xmlns="jabber:message:group_chat_test"]')
.to(SD.Messenger.Room, "groupchat_test");
但是消息进入以太,而不是到达group_chat_test控制器。我们使用&lt; iq&gt;来做类似的事情,但它似乎不适用于群聊消息。
我错过了什么吗?我应该能够以这种方式查询群聊消息吗?还有其他方法可以做到吗?
仅供参考,我目前的解决方法是这个黑客...
bind.query('message[type="groupchat"]').to(SD.Messenger.Room, "all_groupchat_msgs");
在controllers.js中使用此功能
SD.Messenger.Room.prototype.all_groupchat_msgs = function() {
// test the body of the incoming stanza and
// based on it's contents do different things...
};
(使用Ejabberd,Bosh,Stroph)
答案 0 :(得分:1)
您无法更改主XMPP节消息,iq和状态的命名空间。您只能在子元素上拥有自定义命名空间。
当您的IQ工作时,您可能在其中一个子元素中有自定义命名空间。
的示例:
<iq type='get' id='1' to='user@server.com/resource'>
<query xmlns='my-custom-ns'>
payload
</query>
</iq>
<message type='groupchat' to='room@muc.server.com'>
<x xmlns='my-custom-ns'>
payload
</x>
</message>
答案 1 :(得分:1)
这是有效的方法...... 添加自定义属性...
<message
from='pinza@some.com'
to='tulyar@some.com'
type='groupchat'
custom_subtype='my_custom_type'>
<body>Here is my message.</body>
</message>
创建一个在该自定义属性
上的文件管理器的路径bind.query('message[type="groupchat"][custom_subtype="my_custom_type"]')
.to(Room, "controller_for_my_custom_type");