我目前正在开发一个基于 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 完成吗?