Pc setup

来自恩布企业IM,协作平台文档
跳转至: 导航搜索


概述

[该文档版本已经太久过期,仅供参考。]

本文档描述了恩布PC端SDK开发环境的部署方法,以及一些简单的开发例子,适合初次接触SDK的开发者使用。


C++开发环境

SDK文件列表

部署开发环境之前,请确保下面列表中的文件齐全:

文件 描述
EBAppClient.h 云通信主业务接口函数头文件
EBCallbackInterface.h 云通信主业务回调函数头文件
videoroom.h 视频通讯接口函数头文件
videoroomdefine.h 视频通讯类型定义头文件
include\chatroomobject.h 聊天内容信息类定义头文件
include\chatroomhandle.h 聊天消息回调函数头文件
include\eb_define.h 云通信基础类型定义头文件
include\eb_object.h 云通信基础对象类定义头文件
include\ebstring.h CEBString字符串封装类头文件
libebum.lib 云通信核心基础库LIB文件
libebum.dll 云通信核心基础库文件
libebcm.dll 云通信核心基础库文件
videoroom.lib 云通信视频核心基础库LIB文件
videoroom.dll 云通信视频核心基础库文件
swscale-2.dll 视频基础库文件
avcodec-53.dll 视频基础库文件
avformat-53.dll 视频基础库文件
avutil-51.dll 视频基础库文件
eblogin.exe 恩布开放验证登录客户端程序[可选]


VC++开发编译环境

VC++2008(VC9.0)

准备开始

以ebc名字为例,请修改为自己其他名称;

已经有项目工程,可跳过本章内容;


新建MFC项目ebc

打开VC++2008开发工具,新建项目,选择MFC‐>MFC Application,输入项目名称ebc(请修改为你自己项目名称)


Pc-setup-Fig2.1-1.gif


点击OK,进入下一步:


Pc-setup-Fig2.1-2.gif


Next(下一步):


Pc-setup-Fig2.1-3.gif


选择Dialog based(对话框程序),去掉Use Unicode libraries,点击Next(下一步):


Pc-setup-Fig2.1-4.gif


Next(下一步):


Pc-setup-Fig2.1-5.gif


Next(下一步):


Pc-setup-Fig2.1-6.gif


Finish(完成),创建ebc程序;

添加恩布云通信库支持

增加包含头文件目录:


Pc-setup-Fig2.2-1.gif


增加链接库文件目录:


Pc-setup-Fig2.2-2.gif


在stdafx.h文件添加头文件包含:

#include "EBAppClient.h"


Pc-setup-Fig2.2-3.gif


在ebc.cpp文件添加库文件链接:

#pragma comment(lib, "libebum.lib")


Pc-setup-Fig2.2-4.gif


在ebc.h文件添加全局变量定义:

extern CEBAppClient theEBAppClient;


Pc-setup-Fig2.2-5.gif


在ebc.cpp文件添加全局变量定义:

CEBAppClient theEBAppClient;


Pc-setup-Fig2.2-6.gif


成功添加 恩布云通信库支持,下面使用theEBAppClient实例进行调用;

初始化环境、设置消息回调窗口句柄

在BOOL CebcDlg::OnInitDialog()函数处添加以下代码;

std::string sAddress;
entboost::GetAccountAddress("test@entboost.com", sAddress);
theEBAppClient.EB_Init(sAddress.c_str());
theEBAppClient.EB_SetMsgHwnd(this->GetSafeHwnd());

设置开发者编号ID

请通过恩布公司,申请属于你自己的开发者编号ID,设置代码如下:

theEBAppClient.EB_SetDevAppId("634867498713","ec89po09wr354178um098nb712450e5",true);

登录退出

帐号验证(登录)

恩布云通信平台,支持公有云、私有云等不同帐号验证(登录)方式,这里只介绍开放公有云验证方式,其他验证方式请访问恩布论坛或联系恩布技术;

恩布开放验证登录:

theEBAppClient.EB_LogonOAuth("");


成功会返回EB_WM_OAUTH_FORWARD消息,添加消息处理代码:

LRESULT OnMessageOAuthForward(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(EB_WM_OAUTH_FORWARD, OnMessageOAuthForward)
LRESULT CebcDlg::OnMessageOAuthForward(WPARAM wParam, LPARAM lParam)
{
    const char* sOAuthUrl = (const char*)wParam;
    // 打开恩布验证程序
    std::string m_sAppParameter0;
    char pFileName[MAX_PATH] = {0};
    GetModuleFileName(NULL, pFileName, MAX_PATH);
    CString sEBLoginExe = theApp.GetAppPath()+_T("\\eblogin.exe");
    CString sParameter;
    // m_sAppParameter0=="logout",是注销
    sParameter.Format(_T("%d \"%s\" \"%s\" \"%s\""), (int)this->GetSafeHwnd(),sOAuthUrl,m_sAppParameter0.c_str(),pFileName); 
    ShellExecute(NULL, "open", sEBLoginExe, sParameter, theApp.GetAppPath(), SW_SHOW);
    // 这里用浏览器实现
    //ShellExecute(NULL, "open", sOAuthUrl, NULL, NULL,SW_SHOW); 
    return 0;
}


Pc-setup-Fig3.1-1.gif


点击“恩布开放验证登录申请”按钮,申请成功打开恩布开放验证登录客户端程序如下:


Pc-setup-Fig3.1-2.gif


A、恩布开放登录验证是标准界面,企业私有云,可以申请更换企业名称及LOGO;

B、也可以使用页面验证方式;


登录成功会返回EB_WM_LOGON_SUCCESS消息,添加消息处理;

LRESULT OnMessageLogonSuccess(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(EB_WM_LOGON_SUCCESS, OnMessageLogonSuccess)
LRESULT CebcDlg::OnMessageLogonSuccess(WPARAM wParam, LPARAM lParam)
{
    const EB_AccountInfo* pAccountInfo = (const EB_AccountInfo*)wParam;
    CString sWindowText;
    sWindowText.Format(_T("登录用户:%s(%s)"),pAccountInfo->GetUserName().c_str(),pAccountInfo->GetAccount().c_str());
    SetWindowText(sWindowText);
    return 0;
}


登录成功,如下图:


Pc-setup-Fig3.1-3.gif

退出、注销环境

theEBAppClient.EB_Logout();
theEBAppClient.EB_UnInit();

一对一会话(聊天)

呼叫帐号

theEBAppClient.EB_CallAccount(m_sUserAccount);

m_sUserAccount为恩布帐号(注册邮箱格式),如test@entboost.com;

呼叫企业外部帐号会返回EB_WM_CALL_ALERTING消息,当对方接通会话时,返回EB_WM_CALL_CONNECTED消息;

呼叫同企业内部,或者同群组成员帐号,直接返回EB_WM_CALL_CONNECTED消息。

在呼叫同企业帐号,添加消息处理如下:

LRESULT OnMessageCallConnected(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(EB_WM_CALL_CONNECTED, OnMessageCallConnected)
LRESULT CebcDlg::OnMessageCallConnected(WPARAM wParam, LPARAM lParam)
{
    const EB_CallInfo* pConnectInfo = (const EB_CallInfo*)wParam;
    int nConnectFlag = lParam;
    const CEBString sCallId = pConnectInfo->GetCallId();
    const CEBString sFromAccount = pConnectInfo->GetFromAccount();
    CString sText;
    sText.Format(_T("EB_WM_CALL_CONNECTED:callid=%s,account=%s\n"),sCallId.c_str(),sFromAccount.c_str());
    m_editMsg.SetSel(-1);
    m_editMsg.ReplaceSel(sText);
    EB_AccountInfo pFromAccountInfo;
    if (!theEBAppClient.EB_GetCallAccountInfo(sCallId.c_str(),sFromAccount.c_str(),&pFromAccountInfo)) return 1;
    sText.Format(_T("%s,%s,%s,%s\n"),
    pFromAccountInfo.m_pFromCardInfo.m_sName.c_str(),pFromAccountInfo.m_pFromCardInfo.m_sEnterprise.c_str(),
    pFromAccountInfo.m_pFromCardInfo.m_sGroupName.c_str(),pFromAccountInfo.m_pFromCardInfo.m_sTitle.c_str());
    m_editMsg.SetSel(-1);
    m_editMsg.ReplaceSel(sText);
    return 0;
}


如下图例子,呼叫企业内部帐号,成功消息:


Pc-setup-Fig4.1-1.gif


(如果呼叫同企业员工、或者同群组成员,对方也会收到EB_WM_CALL_CONNECTED消息,但PC端软件不会立即打开聊天界面,当收到第一条聊天消息才打开聊天界面。)

发送文本聊天消息

theEBAppClient.EB_SendText(m_sCallId.c_str(),libEbc::ACP2UTF8(m_sSendMsg).c_str());

恩布云通信平台,使用UTF8标准字符编码,如果发送中文消息,需要先作转码后再发送。

m_sCallId是呼叫编号ID,由EB_WM_CALL_CONNECTED消息返回,如5300589A3B4A0003;


Pc-setup-Fig4.2-1.gif


Pc-setup-Fig4.2-2.gif


发送消息成功,会返回CR_WM_SEND_RICH消息,再完善下程序后如下:

LRESULT OnMessageSendRich(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(CR_WM_SEND_RICH, OnMessageSendRich)
LRESULT CebcDlg::OnMessageSendRich(WPARAM wParam, LPARAM lParam)
{
    const CCrRichInfo * pCrMsgInfo = (const CCrRichInfo*)wParam;
    if (pCrMsgInfo==NULL) return 1;
    const std::string sCallId = pCrMsgInfo->GetCallId();
    const EB_ChatRoomRichMsg * pRichMsg = pCrMsgInfo->m_pRichMsg;
    CString sText;
    sText.Format(_T("%s:\n"),pCrMsgInfo->m_sSendFrom.c_str());
    m_editMsg.SetSel(-1);
    m_editMsg.ReplaceSel(sText);
    const std::vector<EB_ChatRoomMsgItem*>& pRichMsgList = pRichMsg->GetList();
    for (size_t i=0; i<pRichMsgList.size(); i++)
    {
        const EB_ChatRoomMsgItem* pMsgItem = pRichMsgList[i];
        if (pMsgItem->GetType() == EB_ChatRoomMsgItem::MIT_TEXT)
        {
            std::string sItemText = libEbc::UTF82ACP(pMsgItem->GetText().c_str());
            sText.Format(_T(" %s:\n"),sItemText.c_str());
            m_editMsg.SetSel(-1);
            m_editMsg.ReplaceSel(sText);
        }
    }
    return 0;
}


Pc-setup-Fig4.2-3.gif

接收聊天消息

收到聊天内容,会收到CR_WM_RECEIVE_RICH消息,添加处理消息如下:

LRESULT OnMessageReceiveRich(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(CR_WM_RECEIVE_RICH, OnMessageReceiveRich)
LRESULT CebcDlg::OnMessageReceiveRich(WPARAM wParam, LPARAM lParam)
{
    const CCrRichInfo * pCrMsgInfo = (const CCrRichInfo*)wParam;
    if (pCrMsgInfo==NULL) return 1;
    const std::string sCallId = pCrMsgInfo->GetCallId();
    const EB_ChatRoomRichMsg * pRichMsg = pCrMsgInfo->m_pRichMsg;
    CString sText;
    sText.Format(_T("%s:\n"),pCrMsgInfo->m_sSendFrom.c_str());
    m_editMsg.SetSel(-1);
    m_editMsg.ReplaceSel(sText);
    const std::vector<EB_ChatRoomMsgItem*>& pRichMsgList = pRichMsg->GetList();
    for (size_t i=0; i<pRichMsgList.size(); i++)
    {
        const EB_ChatRoomMsgItem* pMsgItem = pRichMsgList[i];
        if (pMsgItem->GetType() == EB_ChatRoomMsgItem::MIT_TEXT)
        {
            std::string sItemText = libEbc::UTF82ACP(pMsgItem->GetText().c_str());
            sText.Format(_T(" %s:\n"),sItemText.c_str());
            m_editMsg.SetSel(-1);
            m_editMsg.ReplaceSel(sText);
        }
    }
    return 0;
}


Pc-setup-Fig4.3-1.gif

更多消息类型

恩布支持文本、表情、图片、屏幕截图、图文混排,文件等不同聊天内容,满足各种应用需求。 (详细请看开发例子代码,访问恩布论坛或联系恩布公司技术支持。)