开源
IM
工具编译与环境搭建攻略
因为工作的缘故,需要考察一下目前比较流行的开源
IM
客户端与服务器。由于本人是搞
C++
的,并且需要
IM
平台与现有的一款产品能够实现互联互通,所以将
IM
平台开发语言基本锁定在
C++
或者
C#
,经过考察后发现一款优秀的
C#
语言开发的
IM
开源平台
agsXMPP
。并且采用了一款非常优秀的
JAVA
语言开发的
IM
客户端
spark
作为测试参考,服务器则采用了
openfire
。
这篇文章并不完全是我的原创,为了能够顺利的实现利用
agsXMPP
开源平台制作的客户端能够通过
openfire
服务器与另外一个客户端
spark
进行互联互通以及相互发送文件,我参考了
openfire
的网站相关内容,也在网上参考了其它一些解决方案,不过我将在整个过程中遇到的问题进行了一些总结和归纳,希望后来的同学们能够从这篇文章中得到帮助。
一、
搭建环境所需要的源码工程及其
SVN
地址
1.
agsXMPP
的
SVN
地址是:
svn://svn.ag-software.de/agsxmpp/trunk
2.
openfire
的
SVN
地址是:
http://svn.igniterealtime.org/svn/repos/openfire/trunk
3.
spark
的
SVN
地址是:
http://svn.igniterealtime.org/svn/repos/spark/tags/spark_2_5_8
二、
编译
agsXMPP
编译
agsXMPP
很简单,只需要用
Visual Studio .NET 2008
打开相关工程文件并且编译即可,一般情况下不会出现什么错误。
但是由于客户端采用的是
agsXMPP
自带的实例
miniclient
,服务器端采用的是
openfire
,所以我们在编译源码的时候需要考虑到这两者之间的连通性,经过实际的验证发现,必须对
miniclient
中的相关源代码进行修改后方能顺利通信。
1.
认证协议问题
agsXMPP
在认证的时候,默认使用
DIGEST-MD5
,但是在
openfire
下无法认证通过,改成
PLAIN
即可,也就是在
miniclient
的
frmMain.cs
的
XmppCon_OnSaslStart
方法中,将如下两行的注释去掉:
args.Auto = false;
args.Mechanism = agsXMPP.protocol.sasl.Mechanism.GetMechanismName(agsXMPP.protocol.sasl.MechanismType.PLAIN);
2.
Iq
节
Openfire
不支持
Iq
节带
to
的属性,所以在
agsXMPP
中发送
Iq
节的时候先
RemoveAttribute("to")
一下就行了,具体的就是找到
agsXMPP
源代码目录下的
sasl/saslHandler.cs
文件中,所有调用
SendIq
方法的前面,都加入如下语句:
bIq.RemoveAttribute("to");
好了经过修改后重新编译,我们就可以顺利的与
openfire
服务器进行身份认证并可以发送消息了。
三、
编译
spark
编译
spark
也很简单,
spark
和
openfire
的官方网站上提供了
SVN
下载,编译以及搭建调试环境的方法,我也顺便抄录到这里。
1.
安装
JDK
这个不用说了,注意版本,最少要
1.5
,推荐使用最新的
1.6
版本
2.
安装
Eclipse3.3
a)
从官网下载
Eclipse
3.3 (
对
Java
开发者用的
)
b)
假设你把
eclipse
安装在
c:/program files/eclipse,
进入这个文件夹,为
eclipse.exe
创造一个桌面图标,右击这个图标,选择
“
属性
”
,打开属性对话框,在
“
目标
”
的输入框里,输入如下
"C:/Program
Files/Eclipse/eclipse.exe" -vm "C:/Program
Files/Java/jdk1.6.0/bin/javaw"
熟悉
eclipse
的都知道这是为
eclipse
指定使用哪个
Java
VM
。
3.
为
eclipse
安装
Subversive
插件
a)
用上面建的图标打开
eclipse
,下面开始安装
Subversive
插件,由于我用的是英文版的
ecplipse
,
下面的菜单我都用英文。
b)
点击
Help::Software
Updates::Find and Install...
c)
点击
Search for new features to install
,点
Next
d)
点
New
Remote Site...
按钮
e)
在
name
的输入框里输入
Subversive
,并且在
URL
输入框里输入
http://www.polarion.org/projects/subversive/download/1.1/update-site
(最新的
Subversive
地址上
http://www.eclipse.org/subversive
查询)
f)
点击
Finish
,开始安装
Subversive
,
eclipse
将搜索网站,并且在下一个窗口中显示你想安装的功能
选择安装
Subversive SVN Team Provider Plugin
和
Subversive Client Libraries
下面所有的功能
g)
点
Next
,
eclipse
开始安装过程,安装结束后重启
eclipse
。
4.
利用
svn
方式下载
spark
代码
a)
点击如下
Windows::Open
Perspective::Other...
b)
弹出一个
“Open
Perspective”
对话框,选择
“SVN
Repository Exploring”
,单击
OK
c)
这是
eclipse
界面发生变化,在左边的
“ SVN Repositories”
面板上,右击鼠标选择
New::Repository Location...
d)
在
“New
Repository Location”
的位置输入上面提供的
SVN
地址,单击
“Finish”
e)
在
SVN Repositories
面板上,会发生变化,展开它,找到
spark
的选项,右击
spark
下面的
trunk
项,选择
“Check Out”
,下载
spark
的代码。
f)
下载完成后,选择
Window::Open
Perspective::Java
,在
Project
Explorer
面板上,
看到
Spark
项目,删掉它,在弹出来的对话框中选择
“Do not delete contents”
在工作目录下面找到
spark
文件夹,里面就是
spark
的源代码。其实我们可以通过打包下载源码的方式来获得源码,但那样我们就无法及时跟踪
spark
最新的源码升级,同时有了版本管理,还可以在修改
spark
的过程中,方便的比较与原版的差异,所以还是强烈建议大家采用
SVN
方式下载。
5.
创建
Spark
项目
a)
点击
Window::Open
Perspective::Java
菜单
b)
在
Project
Explorer
窗口中
,
如果有
spark
这个项目
,
把它删了
,
删除时
,
会问你要不要删除文件
,
选择不要
.
c)
选择
File::New::Project...,
再选择
Java::Java Project,
在
New Java Project
窗口选择
"Create project from existiing source",
然后把
spark
文件所在的文件夹加进去
.
d)
在
"project
name"
中输入
spark,
要和文件夹的名字相同
.
e)
点
Finish.
6.
生成
Spark
a)
点击
Window::Show
View::Ant
b)
右击
Ant
面板
,
选择
Add
Buildfiles
c)
展开
spark::build
文件夹
,
选择
build.xml,
点击
"OK"
d)
在
Ant
面板
,
展开
Spark,
双击
"release",
等一段时间
,
会提示
"Build Successful".
7.
Create
Project Builder
a)
点击
Run::Open
Debug Dialog...,
出现
"Run"
窗口
b)
选择
"Java
Application",
点击
"New"
按钮
.
c)
在
"Main"
标签页
,
将
New_configuration
换成
Spark
或其它的这个无所谓
.
d)
点击
Project::Browse
按钮
,
选择
Spark,
再点
OK.
e)
点击
Main
class::Search
按钮
,
选择
main
所在的类
Startup-org.jivesoftware.launcher,
再点击
OK
f)
建议勾选
Stop
in main.
g)
点击
Classpath
标签页
,
选择
User
Entries ,
使得
Advanced..
按钮变的可用
.
h)
点击
Advanced
按钮
.
在弹出来的
Advanced
Options
窗口
,
选择
Add
Folders,
再点
OK,
在
Folder Selection
窗口选择
spark::src::resources
文件夹
,
点击
OK
i)