邮件服务器-邮件系统-邮件技术论坛(BBS)

标题: 在现有的邮件系统上增加即时通信服务 [打印本页]

作者: s0z0y    时间: 2012-4-5 09:16
标题: 在现有的邮件系统上增加即时通信服务
本帖最后由 s0z0y 于 2012-4-5 10:30 编辑

龙笛插件开发快速入门手册
随着企业信息化程度的越来越高,即时通讯软件(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消息。

利用这个插件,OA系统的通知、审批、新邮件信息等都可以通过弹出窗口进行提示。本人不在线,又可以自动转为短消息通知到手机上。
龙笛即时通信系统的引入,既提高了企业运行效率,又降低了通讯成本。





欢迎光临 邮件服务器-邮件系统-邮件技术论坛(BBS) (http://news.5dmail.net/bbs/) Powered by Discuz! X3.2