iCalk
libjingle之创建一个应用程序(粗译文)
星期三, 01月 23rd, 2008近来在看libjingle的时候随手翻译了一些资料,下面是关于用 libjingle创建一个
应用程序的一些细节描述。
只是参考作用,细看请参看原文 . (我的英文不好,译出来的东西也语句不通)
一.登录服务器
http://code.google.com/apis/talk/libjingle/login.html
1.初始化 SSL ,如果需要的话。
2. 建信号线程。最简单的方案是创建一个 AutoThread 对象,它将获取当前操作系统
的线程并且在ThreadManager设置成当前线程。
3.从用户中获取登录信息。 使用XmppClientSettings将信息登进XMPP服务器,比如用户
名,密码和服务器地址。
4.创建一个XMPP 任务管理对象(task manager object).libjingle使用XmppPump,一个
辅助类,包装了XmppClient和处理登录进XMPP服务器,并且处理所有的XMPP任务(tasks
),例如发送和接收状态(presence)通知和登录进服务器。
4. 连接接收登录进度通知。连接上XmppPump对象的SignalStateChange信号。这个信号
将发送关于登录的进度的通知。当它发送STATE_OPEN状态时,你已经是登录进服务器了。
5. 登进服务器。 调用XmppPump::DoLogin来登录。例子代码会将Google Talk服务器设
置成XMPP服务器。你可以在buzz::XmppClientSettings更改其值,而buzz::XmppClientSettings将会传给 XmppPump::DoLogin. Dologin将要求一个运行中的信号线程;
Dologin在你调用信号线程Run之前会队列等待。
6. 调用信号线程的Run,以保证消息线程开始循环监听。或者,如果你有自己的方法令
程序长久地循环,你可以调用 Start 代替。
7. 监听成功或失败的消息。 如前所述,XmppPump 将发送 STATE_OPEN 当应用程序成功
登录。
8. 你将可以请求 STUN和 relay port信息,将它传给 PortAllocator对象。以便进行
下一环节的操作(Sending and Querying Presence)
一旦你已经登录,你将可以发送你的状态给服务器,并且为花名册注册状态通知,下一
节将细说。
二,发送和查询状态
http://code.google.com/apis/talk/libjingle/querying_presence.html
在登进XMPP服务器后,你的应用程序应该提交你的状态给服务器。并且请求好友状态信
息(buddy list)。服务器将回复这些信息给你(away,offline,and so on),例如当前
每个已经登录好友的JID。你可以使用这些JID和状态信息来发送连接请求。服务器将
持续发送状态通知直至你的连接结束。
libjingle 提供两个辅助的XmppTak对象来发送和请求状态:
PresenceOutTask —发送你的状态给服务器。
PresencePushTask — 监听从服务器发来的状态信息。 你将调用PresencePu
shTalk::Start来启动它。你必须连接上这个类的 SignalStatusUpdate 信号,使它能
在收到一个状态流时发出警报(指被通知的意思). 将发送给好友中每个收到状态的人。
为了运行上面这几个对象(类似其它任务), 你必须实例化他们,并且传递父对象的名字
进去(一个基于Task的对象–比如 XmppClient),填满它所需要的信息,使用它们的Start
方法来启动他们。
(重要: Task对象必须用Start这个方法来启动。虽然Task对象有其它额外的方法是你
想运行的(例如,Send),但这些方法只是特别的动作,Task只能在Start调用后才真正
工作。
下面信息描述了怎样发送和接收状态信息(presence):
1. 登录以取得状态信息通知。 实例化并启动 PresencePushTask ,连接上
OnStatusUpdate 信号。有些服务器在收到状态流(presence stanza)时会返回花名称状态
通知。 [...]
icalk的下一步计划
星期一, 01月 21st, 2008gloox已经放出了1.0alpha版,相信离1.0的正式版不远了。而libjingle我也掌握了一个大概,
心里对这个库也有了些信心。所以随之而来的工作是新版本的icalk的计划了。这将是一个激动
人心的版本,丰富的xmpp协议特性,支持gtalk的文件传输与语音功能。
但是这远非一项简单的工作,gloox库升级到1.0alpha中很多api起了变化。而libjingle库的构建
融入代码中也是件非常麻烦的事。我对于automake这类构建的恐惧更基于编程~~
各位,如果有兴趣有能力,请加入我们。一起完善这个激动人心的项目。
这其实也是一次学习的好机会,我的代码的大部分源码都有中文注释。
项目缺的不只是编程的人员,谁有好的图标风格设计的也请支援我们。
联系请发邮件列表
icalk项目的邮件列表是 https://groups.google.com/group/icalk
icalk要怎样开发下去
星期三, 12月 12th, 2007libjingle是Gtalk的底层基础库。有文件交换和语音通讯功能。这个库的
源码放出来也很久了啊。但我至今还没看到有什么基于它的有效应用的出现。
freetalk也许算一个,不过那是命令行的,基于libjingle 0.30的版本。而kopete
似乎在源码里也有这么一个libjingle库。大多是想用它的语音功能。
而Linux版的Gtalk也迟迟没有消息。不过对偶们来说,libjingle的文件传输功能
才是最具吸引力的吧。在Linux上的IM,我就没有一个满意的文件传输方案。gaim
类的大多是需要公网IP或端口映射的。
google的态度实在是很奇怪,看着libjingle库里的文档。一步一步教着用libjingle构建
一个应用程序。我说你的工程师,一个Linux下的Gtalk在libjingle的情况下只需要构建
一个UI就成了吧。你库都搞成这样了,例子程序也有了,教程都TM地写出来了。为啥
就是不把UI给直接搞出来哩?你们FAQ里那句 We look forward to the Google Talk
client supporting Linux and Mac OSX in the future
我看的太久了。到底future到啥时候啊~~ 偶可是天天用着你的服务的哩~
libjingle这个库也是,自今年2月份更新了第四次后(在google code的svn里),就没动静了。
Gtalk也是好久没有更新了。Google看来不是太重视这个吗?还是它接近完美?
libjingle下载回来在Linux下编译也是麻烦重重。
事实上在我写icalk的时候,我就考虑着用它作协议库。但当时我还是选了Gloox来作icalk的
协议库。一来当时我还没写过大点的程序,所以一开始选用的是好入手的gloox. gloox的开发
很积极,有问题直接问作者也能得到很好的回复。二来,libjingle的C++代码对于当时还是雏鸟
的我来说,简直是天书。当时看了就头疼。而且当时的 libjingle 我根本就编译不过去。晕死它。
icalk最近是有些瓶颈了。界面上有些东西我真不知道怎样实现。协议上还得等gloox。gloox的积极
的开发开始出现反作用。也就是某些试验性的功能函数变化很快。而且它的文件传输还在开发当中。
因此得等它的稳定版本的释出。但我担心的是,它的文件传输还是不能够穿越内网。如果是这样,我
实现它就没有多大意义了。而且icalk的目标是做个全功能的IM。虽然libjingle没有实现如聊天室,服务
发现等协议。但对比起文件传输,语音通话等协议来说,让手工实现的话,当然是前者更让我有信心些。
既然是这样,icalk可能要面临着重写。嗯,还是双手准备,一边等gloox,一边自己研究libjingle.
好在图形库什么的改改就可以用。重要的是libjingle的工作方式。
至今我还没啥概念。google啊,要不,你马上出Linux版本的Gtalk。要不,你再迟半年吧。给点时间我啊~~
icalk的登录界面(贴图)
星期六, 12月 1st, 2007icalk 我原来是想叫iTalk的。基于C++语言,使用 Gtkmm图形库,用gloox作为
协议库。一个单用户jabber/xmpp聊天软件。
fixed:已经能保存密码了。并添加服务器和端口设置功能。
目前还在完善中。代码在svn里,未打包。
Cyclone团队出品,九成是半成品。呵呵。