Libjingle 看起来非常强大,并带有一堆示例程序和扩展。然而我一直无法使用它,我在 IRC 上与我交谈过的人告诉我,他们发现 API 是一团糟,我宁愿使用其他东西。
但我愿意再试一次。谁有好的教程?还是对不同课程的良好介绍,开始?(谷歌的官方文档不是)。
Libjingle 看起来非常强大,并带有一堆示例程序和扩展。然而我一直无法使用它,我在 IRC 上与我交谈过的人告诉我,他们发现 API 是一团糟,我宁愿使用其他东西。
但我愿意再试一次。谁有好的教程?还是对不同课程的良好介绍,开始?(谷歌的官方文档不是)。
我刚刚建立了 libjingle。它不是开箱即用的,需要一些补丁(记录在 libjingle 站点上)。我即将用它进行端到端测试。我很乐意分享我学到的东西。
如果你有构建问题,我为你感到难过,儿子。因为说真的,libjingle 是个很难编译的婊子。如果你可以为你正在构建的任何平台编译它,那么你就完成了 90% 的工作。这真的取决于你在周末坐下来,一一解决编译器问题。Xcode 的两个快速指针:删除(但不删除)所有特定于 windows 的垃圾,并删除所有具有 main 方法(单元测试和 mains)的文件。
一旦你构建了它,API 实际上是相当简单的。典型的 libjingle 应用程序的体系结构有几个运行的 XMPP 任务。有些任务是输出任务,会发出节: http ://code.google.com/p/libjingle/source/browse/trunk/talk/examples/call/friendinvitesendtask.cc (查看发送方法)这应该是很简单。它构建一个 XML 节并将其排队以供 XMPPclient 处理。
还有处理节的输入任务: 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 的最后一个提示:对线程非常小心。