Gaim Plugin开发
一. 插件描述
Gaim是基于GTK+2的多平台的即时通信的客户端。它支持很多常见的协议,包括:MSN,Yahoo,ICQ,QQ,JABBER还有我在做的淘宝旺旺.如果需要为一个新的im 协议做一个插件,那么看下面的简单描述,详细的内容只能等再进一步补充了.
二. 接口定义
按照GAIM PLUGIN API的要求定义接口函数和接口变量.
1. 定义Gaim Plugin句柄
static GaimPlugin *ww_plugin = NULL;
此结构定义在Plugin.h中说明:
结构的成员变量 GaimPluginInfo *info将在初始化中指向插件详细信息的指针.
2.定义插件协议信息
static GaimPluginProtocolInfo prpl_info= {
..
..
..
}
此结构定义了所有协议函数的人口以提供给GAIM调用. GAIM在事件触发的时候来这个结构里面查找相应的函数,如用户在GAIM使用此插件在界面上点击登陆时候,GAIM将在此查找到登陆的函数进行调用.
注意: list_icon函数不能为空
3. 定义插件详细信息
static GaimPluginInfo info ={
..
..
}
此结构定义在Plugin.h中说明:
其中主要的有插件ID,插件的名字,插件的版本,插件类型(说明是协议插件或者是普通插件),插件协议信息(定义消息处理)
4.定义初始化函数
static void init_plugin(GaimPlugin *plugin){
ww_plugin = plugin; //将plugin指向前面定义的ww_plugin
}
5.定义插件入口函数
GAIM_INIT_PLUGIN(ww, init_plugin, info)
6.源代码.
不知道怎么放,参看gaim代码里面的Protocol例子吧
三. 编译安装
看一下Makefile吧
all:install
libwangwang.so:wwang.o
ld -shared -o libwwang.so wwang.o
wwang.o:wwang.c
gcc -fPIC -DGAIM_PLUGINS -Wall -g -DVERSION=/" 1.1.1 /" - I. -I../../src -I.. -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/
include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -c wwang.c -o wwang.o
install: libwangwang.so
cp libwwang.so /home/wee/bin/gaim/lib/gaim/
三. 进一步处理
编译完的so被拷贝到GAIM安装目录下后,启动GAIM选新建一个帐户,然后可以在协议列表里面看到你所定义的插件的名字,可以输入用户名和密码保存,当然登陆的时候,点登陆按钮什么也不没做,进一步的处理是根据你要连接的IM服务器的协议针对每个动作进行处理,如登陆退出,增删改好友,组,收发消息. 可以参考的例子除了GAIM自身带的MSN,JABBER,yahoo的插件外,还有OPENQ..