微软实时通信API多客户端通信实战(2)[图]
SIP 服务器注册
要启用出席信息服务,需要创建一个“配置文件”对象。配置文件对象是通过 IRTCClientProvisioning::CreateProfile 方法创建的。要创建配置文件对象,客户端应用程序需要创建一个符合装置架构的 XML 字符串。XML 架构的&&属性包括:
装置设置 - 配置文件的唯一标识符。
用户设置 - 用户的 URI、领域和登录帐户信息
客户端设置 - 有关与通信链路无关的客户端应用程序信息。此信息是可选的。
提供商设置 - 有关 Internet 电话服务提供商 (ITSP) 的信息。
SIP 服务器设置 - 指定可用的 SIP 服务器、SIP 服务器角色和服务器支持的会话类型。
要在 SIP 服务器上注册用户,客户端需要创建一个 XML 配置文件字符串,指示 RTC 客户端 API 如何与 SIP 服务器进行通信。创建 XML 字符串后,即可调用 IRTCClientProvisioning::CreateProfile() 方法创建一个配置文件对象。下一步是调用 IRTCClientProvisioning::EnableProfile() 方法在 RTC 服务器上注册用户,并指定配置文件应该在该服务器上注册的会话类型。注册类型可以是:允许传入计算机到计算机的会话 (RTCRF_REGISTER_INVITE_SESSIONS)、允许传入即时消息会话 (RTCRF_REGISTER_MESSAGE_SESSIONS)、允许传入观察程序 (RTCRF_REGISTER_PRESENCE) 或允许所有的注册类型 (RTCRF_REGISTER_ALL)。设置 RTCRF_REGISTER_PRESENCE 或 RTCRF_REGISTER_ALL 将通知注册服务器:客户端接受 SIP SUBSCRIBE 方法。这将允许用户通知其他用户他们的出席状态更改、获取其联系人出席状态更改的通知以及将出席信息添加到观察程序列表的其他人。
观察程序对象在好友列表中提供了用户状态。观察程序可以查询 Presentity 的状态,并得到好友列表中的用户状态更改的通知。观察程序还使用户能够通过 Presentity 的状态中断或允许其他人加入。
示例代码说明了注册用户以及启用出席信息和好友列表的步骤。
HRESULT CAVDConfDlg::DoSIPLogin(BSTR bXMLObj)
{
HRESULT hr;
... .
// 获取 RTC 客户端装置&&接口
IRTCClientProvisioning * pProv = NULL;
hr = m_pClient->QueryInterface(
IID_IRTCClientProvisioning,
(void **)&pProv);
if (FAILED(hr))
{
// 查询&&接口失败
return hr;
}
// 从 XML 装置文档创建 RTC
// 配置文件对象
hr = pProv->CreateProfile(bXMLObj, &m_pProfile);
SAFE_FREE_STRING(bXMLObj);
if (FAILED(hr))
{
// CreateProfile 失败
SAFE_RELEASE(pProv);
return hr;
}
// 启用 RTC 配置文件对象
hr = pProv->EnableProfile(m_pProfile, RTCRF_REGISTER_ALL);
SAFE_RELEASE(pProv);
if (FAILED(hr))
{
// EnableProfile 失败
return hr;
}