龙笛即时通讯软件论坛  

返回   龙笛即时通讯软件论坛 > 龙笛(long-d.cn)即时通讯软件 > 龙笛即时通讯软件售后服务

回复
 
LinkBack 主题工具 显示模式
旧 2012-07-23, 01:32 PM   #1 (permalink)
论坛管理员
 
admin 的头像
 
注册日期: 2009-07-01
帖子: 47
默认 龙笛插件开发快速入门手册

龙笛插件开发快速入门手册
随着企业信息化程度的越来越高,即时通讯软件(IM)在企业信息化进程中不断被强化,作为信息传递的中枢,与OA、CRM、E-mail、SMS等软件的联系越来越紧密,并朝着平台化方向演变。为了方便企业用户深度整合各种OA相关的软件,个性化地定制属于自己的企业即时通讯系统,从龙笛1.5.0.25版本开始,引入了龙笛插件体系。
从而企业用户可以根据自己的需要,以龙笛为平台,借助龙笛SDK的二次开发接口,开发出满足企业业务需要的各类应用。
为了方便企业用户的开发,特撰写本文档。
龙笛插件体系
龙笛插件体系是建立在龙笛IM核心之上的一层接口、方法和二进制模块。主要由如下文件提供:
ZJIMDef.h
EIMPluginServiceDef.h
EIMPluginServiceInc.h
EIMPluginService.dll
EIMPluginService.lib
EIMPlugin.dll
目前的龙笛插件体系是以C++ header/lib/dll的方式工作的,由C++ header定义服务接口,lib提供接口函数的二进制链接,dll方式加载插件。因此,开发龙笛插件需要使用C++语言进行。
龙笛插件二进制接口规范
任何一个龙笛插件必须显式导出3个函数,它们由插件管理器调用:
PluginInitialize
PluginUninitialize
PluginRegistered
三个函数的定义如下:
typedef BOOL (*PLUGININITIALIZE)(EIMPluginInfo& stPluginInfo);
typedef BOOL (*PLUGINUNINITIALIZE)();
typedef BOOL (*PLUGINREGISTERED)(LPCTSTR strCurrentPluginPath, UINT nPluginID);
PluginInitialize:插件初始化。插件管理器调用此函数通知插件进行自身的初始化工作,并通过EIMPluginInfo结构体获得此插件的基本信息。
PluginUninitialize:插件反初始化。插件管理器调用此函数通知插件即将被卸载,须进行对象释放、状态复位等反向初始化工作。
PluginRegistered:插件注册完成。插件管理器在调用插件初始化之后调用此函数,在此函数中插件可向系统的各个slot区域注册自己的对象。
龙笛插件对象
目前只有两种对象,即插件对象和slot区域对象。每个插件至少有一个插件对象,而slot区对象,则可有可无,可多可少。
// 插件对象
typedef struct tagEIMPluginInfo
{
TCHAR szPluginGuid[33];
TCHAR szPluginName[32];
TCHAR szPluginDesc[256];
TCHAR szPluginComp[32];
TCHAR szPluginUrl[64];
UINT nSlotItems;
}EIMPluginInfo, *LPEIMPluginInfo;
// 插槽区对象
typedef struct tagEIMSlotItemInfo
{
SHORT nSlotItemInnerID;
UINT nSlotItemType;
TCHAR szSlotItemIcon[32];
TCHAR szSlotItemText[32];
TCHAR szSlotItemToolTip[64];
UINT nSlotItemMenu;
}EIMSlotItemInfo, *LPEIMSlotItemInfo;
龙笛系统对插件的支持
龙笛系统提供三类接口供插件使用其服务,它们分别是:
IEIMPluginManager:插件管理器接口
IEIMBaseService:为插件提供的基础服务接口
IEIMMessageService:为插件提供的消息服务接口
三个相应的全局函数可以获得以上三个接口:
IEIMPluginManager* EIMGetPluginManager();
IEIMBaseService* EIMGetBaseService();
IEIMMessageService* EIMGetMessageService();
龙笛插件接口
插件为了响应龙笛系统的各种事件或处理Plugin to Plugin的消息,必须实现下面的接口,供龙笛系统在需要的时候回调:
IEIMPluginBaseProc:插件处理基本业务的接口
IEIMPluginMessageProc:插件处理消息的接口(暂不可用)
IEIMPluginNotifyProc:插件内部消息处理接口
一个简单的示例
下面以抽奖插件为例说明在龙笛上开发一个插件的简单步骤。
第一步:创建一个DLL工程。
第二步:配置工程。
设置工程使用多字节字符集。
在stdafx.h中包含EIMPluginServiceInc.h文件。
定义插件的ID和名称。
#define EIM_PLUGIN_NAME _T("龙笛-抽奖插件")
#define EIM_PLUGIN_ID _T("EIMPlugin.Lucky")
第三步:实现插件的三个基本函数。
在PluginInitialize中进行初始并填充传入的EIMPluginInfo结构体。
BOOL PluginInitialize(EIMPluginInfo& stPluginInfo)
{
stPluginInfo.nSlotItems = EIM_SLOT_CHATDLG_EDIT_TOOLBAR|EIM_SLOT_TRIBEDLG_EDIT_TOOLBAR;
_tcscpy_s(stPluginInfo.szPluginGuid, 33, _T("CA308C19099749ae9ABAA6C4BF24DF26"));
_tcscpy_s(stPluginInfo.szPluginComp, 32, _T("龙笛开发组"));
_tcscpy_s(stPluginInfo.szPluginDesc, 256, _T("本插件实现掷骰子、抽奖功能,试一下您的运气,在单聊和群中娱乐!"));
_tcscpy_s(stPluginInfo.szPluginName, 32, EIM_PLUGIN_NAME);
_tcscpy_s(stPluginInfo.szPluginUrl, 64, _T("http://www.long-d.cn"));
return TRUE;
}
在PluginUninitialize进行反初始化。
BOOL PluginUninitialize()
{
return TRUE;
}
在PluginRegistered中向聊天窗口和群窗口工具栏添加按钮,并添加消息处理接口:
BOOL PluginRegistered(LPCTSTR strCurrentPluginPath, UINT nPluginID)
{
EIMSlotItemInfo slot_item;
slot_item.nSlotItemInnerID = (WORD)ID_TOOLBARMENU_CAST;
slot_item.nSlotItemMenu = IDR_MENU;
slot_item.nSlotItemType = EIM_SLOT_CHATDLG_EDIT_TOOLBAR|EIM_SLOT_TRIBEDLG_EDIT_TOOLBAR;
_tcscpy_s(slot_item.szSlotItemIcon, 32, _T("lucky_icon.png"));
_tcscpy_s(slot_item.szSlotItemText, 32, _T("骰子"));
_tcscpy_s(slot_item.szSlotItemToolTip, 32, _T("掷骰子、抽奖"));
IEIMPluginManager* pPluginManager = EIMGetPluginManager();
if (pPluginManager != NULL)
{
pPluginManager->AddSlotItem(strCurrentPluginPath, nPluginID, slot_item);
pPluginManager->AddBaseProc(nPluginID, &procNotify);
pPluginManager->AddPluginNotifyProc(nPluginID, EIM_PLUGIN_ID, &procNotify);
}
CZJRandom::Init();
return TRUE;
}
第四步:实现插件的消息处理接口。
实现IEIMPluginNotifyProc接口,用于处理插件通普通消息通道或群消息通道发过来的消息。
实现IEIMPluginBaseProc接口,用于处理龙笛用户登录、退出等通知和UI界面的Windows消息。
__________________

让世界倾听我们的笛声。
admin 当前离线   回复时引用此帖
回复

书签

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 06:14 PM