在现有的邮件系统上增加即时通信服务
本帖最后由 s0z0y 于 2012-4-5 10:30 编辑龙笛插件开发快速入门手册随着企业信息化程度的越来越高,即时通讯软件(IM)在企业信息化进程中不断被强化,作为信息传递的中枢,与OA、CRM、E-mail、SMS等软件的联系越来越紧密,并朝着平台化方向演变。为了方便企业用户深度整合各种OA相关的软件,个性化地定制属于自己的企业即时通讯系统,从龙笛1.5.0.25版本开始,引入了龙笛插件体系。从而企业用户可以根据自己的需要,以龙笛为平台,借助龙笛SDK的二次开发接口,开发出满足企业业务需要的各类应用。为了方便企业用户的开发,特撰写本文档。龙笛插件体系 龙笛插件体系是建立在龙笛IM核心之上的一层接口、方法和二进制模块。主要由如下文件提供:ZJIMDef.hEIMPluginServiceDef.hEIMPluginServiceInc.hEIMPluginService.dllEIMPluginService.libEIMPlugin.dll目前的龙笛插件体系是以C++ header/lib/dll的方式工作的,由C++ header定义服务接口,lib提供接口函数的二进制链接,dll方式加载插件。因此,开发龙笛插件需要使用C++语言进行。龙笛插件二进制接口规范 任何一个龙笛插件必须显式导出3个函数,它们由插件管理器调用:PluginInitializePluginUninitializePluginRegistered三个函数的定义如下: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; TCHAR szPluginName; TCHAR szPluginDesc; TCHAR szPluginComp; TCHAR szPluginUrl; UINT nSlotItems;}EIMPluginInfo, *LPEIMPluginInfo;// 插槽区对象typedef struct tagEIMSlotItemInfo{ SHORT nSlotItemInnerID; UINT nSlotItemType; TCHAR szSlotItemIcon; TCHAR szSlotItemText; TCHAR szSlotItemToolTip; 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消息。
利用这个插件,OA系统的通知、审批、新邮件信息等都可以通过弹出窗口进行提示。本人不在线,又可以自动转为短消息通知到手机上。龙笛即时通信系统的引入,既提高了企业运行效率,又降低了通讯成本。
页:
[1]
