Libjingle似乎非常强大,并附带了一系列示例程序和扩展。然而,我一直无法使用它,在IRC上与我交谈过的人告诉我,他们发现API一团糟,我应该使用其他东西。
但我愿意再试一次。有人有好的教程吗?还是先好好介绍一下不同的课程?(谷歌的官方文档并非如此)。
我刚刚构建了libjingle。它不是开箱即用的,需要一些补丁(记录在libjingle网站上)。我即将用它进行端到端测试。我很乐意分享我学到的东西。
如果你有构建问题,我为你感到难过,儿子。因为说真的,libjingle是个婊子养的。如果你能为你正在构建的任何平台编译它,那么你已经完成了90%的工作。这真的取决于你在周末坐下来,一个接一个地解决编译器问题。Xcode的两个快速指针:删除(但不要删除)所有特定于windows的垃圾,以及删除所有具有主方法(unittests和mains)的文件
一旦你建立了它,API实际上是相当直接的。一个典型的libjingle应用程序的体系结构有几个运行的XMPP任务。有些任务是输出任务,将发送节:http://code.google.com/p/libjingle/source/browse/trunk/talk/examples/call/friendinvitesendtask.cc(查看Send方法)这应该是非常直接的。它构建了一个XML节,并将其排队等待XMPP客户端进行处理。
还有一些处理节的输入任务:http://code.google.com/p/libjingle/source/browse/trunk/talk/examples/call/mucinviterecvtask.cc(查看HandleStanza方法)
虽然这个特定的HandleStanza方法是一个糟糕的展示,但它的要点是,这个方法是为所有XMPP消息调用的。你首先需要确定你是否关心它:
if (stanza->Name() != QN_MESSAGE) return false;
然后,您将遍历XML,提取出您需要的信息,并向应用程序中关心这一点的部分发出信号。
当然,还有隧道API,它非常复杂,并不在StackOverflow答案的范围内。如果有足够的兴趣,我可以对此进行研究,但我建议您在深入设置隧道之前,至少先设置libjingle并传递一些XMPP消息。
关于使用libjingle的最后一点:在线程处理方面要格外小心。