自己动手为gaim写个闪屏插件
2007-01-26 21:19
211 查看
目标:
在聊天窗口的toolbar里添加一个按钮,点击发送闪屏消息给对方。
软件版本:
gaim-2.0.0beta6(http://gaim.sourceforge.net/)
主要思想:
一.确定闪屏的协议:
这个简单,让同事发个闪屏消息给我,用wireshark抓包就能得到了,最终得到闪屏的消息为:
MSG username@hotmail.com /342/225/254nickname 69/r/n
MIME-Version: 1.0/r/n
Content-Type: text/x-msnmsgr-datacast/r/n
/r/n
ID: 1/r/n
/r/n
二.采用插件形式,新建nudge.c。
这个主要参考gtk/plugins已有的插件来了解如何写插件。
主要实现:
1.填充GaimPluginInfo结构(参见libgaim/plugin.h);
这个结构指定了插件的id,name,版本,描述等信息。
主要需要指定插件加载的函数入口地址,当加载插件时会调用此方法,我这里指定为plugin_load。
另外GaimPluginType选择GAIM_PLUGIN_STANDARD,这样可以在Tools/plugins里看到你写的插件来手工加载卸载插件。
2.实现plugin_load.
为了在打开对话窗口时,添加一个button到toolbar,需要
gaim_signal_connect(handle,"conversation-created",plugin, GAIM_CALLBACK(nudge), NULL);
GAIM_CALLBACK(nudge)为回调,主要实现添加按钮到toolbar。
另外,这里需要注册一个nudge信号,并为该信号指定回调do_nudge,当激发nudge信号,就会调用回调函数do_nudge实现发送闪屏的消息。
gaim_signal_register(handle,"nudge",gaim_marshal_VOID__POINTER,NULL,1, gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_CONVERSATION));
gaim_signal_connect(handle,"nudge",plugin, GAIM_CALLBACK(do_nudge), NULL);
3.实现向toolbar添加按钮的函数nudge.
toolbar为GtkIMHtmlToolbar(gtk/gtkimhtmltoolbar.h),可以从GaimGtkConversation(gtk/gtkconv.h)获得,而GaimGtkConversation可以从GaimConversation(libgaim/ conversation.h)获得。
主要步骤:
gtkconv = GAIM_GTK_CONVERSATION(c);
toolbar = gtkconv->toolbar;
hbox = GTK_WIDGET(toolbar);
button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(send_nudge_cb),c );
当点按钮会调用send_nudge_cb方法,这个函数主要激发nudge信号,调用do_nudge函数来实现发送闪屏消息。
gaim_signal_emit(gaim_conversations_get_handle(),"nudge", conv, conv->name);
4.实现发送闪屏消息do_nudge。
闪屏的消息,msn的协议插件已经封装,通过msn_message_new_nudge()(libgaim/protocols/msn/msg.h)得到,只要发送即可,msn协议插件里也有类似的函数libgaim/protocols/msn/msn.c里的msn_cmd_nudge。
5.注意本插件需要利用msn的协议插件来发送消息,所以需要依赖prpl-msn插件,这可以通过设置GaimPlugin里的GList *dependencies来实现。
可以在init_plugin(GaimPlugin *plugin)里指定,具体方法如下:
GList *dep_list = NULL;
dep_list = g_list_append(dep_list,"prpl-msn");
plugin->info->dependencies = dep_list;
注意prpl-msn为msn协议插件的id.
6.修改Makefile.am,Makefile.in添加nudge.c的相关定义,需要注意插件需要连接libmsn.so的库。
重新编译,安装好后,在Tools/plugins里选中Nudge插件,然后就可以给好友发送闪屏消息了!
附:nudge.c
在聊天窗口的toolbar里添加一个按钮,点击发送闪屏消息给对方。
软件版本:
gaim-2.0.0beta6(http://gaim.sourceforge.net/)
主要思想:
一.确定闪屏的协议:
这个简单,让同事发个闪屏消息给我,用wireshark抓包就能得到了,最终得到闪屏的消息为:
MSG username@hotmail.com /342/225/254nickname 69/r/n
MIME-Version: 1.0/r/n
Content-Type: text/x-msnmsgr-datacast/r/n
/r/n
ID: 1/r/n
/r/n
二.采用插件形式,新建nudge.c。
这个主要参考gtk/plugins已有的插件来了解如何写插件。
主要实现:
1.填充GaimPluginInfo结构(参见libgaim/plugin.h);
这个结构指定了插件的id,name,版本,描述等信息。
主要需要指定插件加载的函数入口地址,当加载插件时会调用此方法,我这里指定为plugin_load。
另外GaimPluginType选择GAIM_PLUGIN_STANDARD,这样可以在Tools/plugins里看到你写的插件来手工加载卸载插件。
2.实现plugin_load.
为了在打开对话窗口时,添加一个button到toolbar,需要
gaim_signal_connect(handle,"conversation-created",plugin, GAIM_CALLBACK(nudge), NULL);
GAIM_CALLBACK(nudge)为回调,主要实现添加按钮到toolbar。
另外,这里需要注册一个nudge信号,并为该信号指定回调do_nudge,当激发nudge信号,就会调用回调函数do_nudge实现发送闪屏的消息。
gaim_signal_register(handle,"nudge",gaim_marshal_VOID__POINTER,NULL,1, gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_CONVERSATION));
gaim_signal_connect(handle,"nudge",plugin, GAIM_CALLBACK(do_nudge), NULL);
3.实现向toolbar添加按钮的函数nudge.
toolbar为GtkIMHtmlToolbar(gtk/gtkimhtmltoolbar.h),可以从GaimGtkConversation(gtk/gtkconv.h)获得,而GaimGtkConversation可以从GaimConversation(libgaim/ conversation.h)获得。
主要步骤:
gtkconv = GAIM_GTK_CONVERSATION(c);
toolbar = gtkconv->toolbar;
hbox = GTK_WIDGET(toolbar);
button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(button), "clicked",G_CALLBACK(send_nudge_cb),c );
当点按钮会调用send_nudge_cb方法,这个函数主要激发nudge信号,调用do_nudge函数来实现发送闪屏消息。
gaim_signal_emit(gaim_conversations_get_handle(),"nudge", conv, conv->name);
4.实现发送闪屏消息do_nudge。
闪屏的消息,msn的协议插件已经封装,通过msn_message_new_nudge()(libgaim/protocols/msn/msg.h)得到,只要发送即可,msn协议插件里也有类似的函数libgaim/protocols/msn/msn.c里的msn_cmd_nudge。
5.注意本插件需要利用msn的协议插件来发送消息,所以需要依赖prpl-msn插件,这可以通过设置GaimPlugin里的GList *dependencies来实现。
可以在init_plugin(GaimPlugin *plugin)里指定,具体方法如下:
GList *dep_list = NULL;
dep_list = g_list_append(dep_list,"prpl-msn");
plugin->info->dependencies = dep_list;
注意prpl-msn为msn协议插件的id.
6.修改Makefile.am,Makefile.in添加nudge.c的相关定义,需要注意插件需要连接libmsn.so的库。
重新编译,安装好后,在Tools/plugins里选中Nudge插件,然后就可以给好友发送闪屏消息了!
附:nudge.c
相关文章推荐
- .NET实现之(自己动手写高内聚插件系统)
- 自己动手编写一个VS插件(八)
- 自己动手丰衣足食之 jQuery 数量加减插件
- 自己动手丰衣足食之移动端城市选择插件
- 自己动手编写一个VS插件(八)
- 自己动手JQuery插件开发
- 自己动手编写一个VS插件(三)——创建工具栏之一
- 自己动手开发jQuery插件
- [置顶] 自己动手写一个Android Studio插件
- 自己动手制作基于jQuery的Web页面加载进度条插件
- 自己动手做jQuery插件
- 自己动手阻挡网络插件提示框
- 自己动手编写一个VS插件(一)
- 自己动手编写一个VS插件(二)——理解OnConnection函数
- 自己动手编写一个VS插件(三)——创建工具栏之一
- 自己动手写一个jQuery插件(第一篇)
- 自己动手编写一个VS插件(五)
- 自己动手丰衣足食之移动端日期选择插件
- 自己动手丰衣足食之表格排序插件jquery.tableSort.js
- 自己动手JQuery插件开发