2

我收到一条看起来像这样的消息...

<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 文件中,我试图根据正文内容以外的其他内容来路由消息 - 具体来说,我想根据自定义命名空间来路由它(所以我可以有不同的群聊消息类型,由不同的控制器)所以我试试这个......

bind.query('message[type="groupchat"][xmlns="jabber:message:group_chat_test"]')
  .to(SD.Messenger.Room, "groupchat_test");

但是消息进入以太而不是到达 group_chat_test 控制器。我们用 <iq> 做类似的事情,但它似乎不适用于群聊消息。

我错过了什么吗?我应该能够以这种方式查询群聊消息吗?我还有其他方法可以做到吗?

仅供参考,我目前的解决方法是这个黑客......

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)

4

2 回答 2

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>
于 2012-12-06T08:39:10.010 回答
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");
于 2012-12-06T13:30:05.473 回答