【发布时间】:2014-12-21 11:41:10
【问题描述】:
我目前正在开发一个基于 XMPP 的系统,该系统由一个 iOS 应用程序、一个 ejabberd 服务器和一个独立的客户端组成,该客户端充当一个控制器,可以接收来自用户的请求并采取相应的操作(我知道 IQ节,但是在 Erlang 中开发 ejabberd 模块已经超出了我的范围。)
对于 iOS 应用程序,我使用 XMPPFramework,对于控制器,我选择了 Swiften,因为它是这里最推荐的 C++ 库。由于这不仅仅是一个简单的消息传递系统,我发现需要在消息中包含一些自定义属性,如下所示:
<message type="chat"
to="controller@example"
custom_attribute_1="Value 1"
custom_attribute_2="Value 2"
<subject>Subject</subject>
<body>Body</body>
<thread>Thread</thread>
</message>
使用 XMPPFramework 很容易做到这一点,但我在尝试使用 Swiften 读取自定义属性时失败了,更不用说生成自定义消息了。
我尝试了两种方法。第一个是从消息中获取原始 XML 并使用 boost XML Parser 获取属性,但我什至无法从消息中获取 RawXMLPayload。
我认为最终会更直接的第二种方法是分析 Swift/Swiften 代码,以了解它们如何管理整个 XML 到对象的转换。我知道他们使用AttributeMap 类,但我不知道这些对象是如何产生的,所以也没有运气。
我怎样才能做到这一点?可以使用 Swiften 完成吗?
【问题讨论】:
-
从不将自定义属性放在消息元素的顶层。另见stackoverflow.com/a/26510821/194894