微软实时通信API多客户端通信实战(2)[图](2)
// 启用出席信息
// 最好在启用配置文件之后立即启用出席信息,
// 这样传入的观察程序就不会丢失。
// 有关&&函数定义,请参阅以下 EnablePresence() 方法
hr = EnablePresence(TRUE);
if (FAILED(hr))
{
// DoEnablePresence 失败
DoSIPLogoff(); // 有关&&函数示例,请参阅代码示例 AVDConf2.exe
return hr;
}
return S_OK;
}
启用配置文件后,还应启用出席信息以防传入的观察程序&&事件丢失。EnablePresence() 方法还演示了创建好友列表的方法。
HRESULT CAVDConfDlg::EnablePresence(BOOL bEnable)
{
IRTCClientPresence * pPresence = NULL;
HRESULT hr;
// 清理好友列表
ClearBuddyList();
// 获取 RTC 客户端出席信息&&接口
hr = m_pClient->QueryInterface(
IID_IRTCClientPresence,
(void **)&pPresence);
if (FAILED(hr))
{
// QueryInterface 失败
return hr;
}
// 获取出席信息存储区的位置
VARIANT varStorage;
VariantInit(&varStorage);
varStorage.vt = VT_BSTR;
varStorage.bstrVal = SysAllocString(L"presence.xml");
// 如果禁用出席信息,则将最新的
// 出席信息数据副本保存到 presence.xml 文件。
if (!bEnable && m_bPresenceEnabled)
{
hr = pPresence->Export(varStorage);
if (FAILED(hr))
{
// 导出失败
SAFE_RELEASE(pPresence);
VariantClear(&varStorage);
return hr;
}
}
// 启用出席信息
hr = pPresence->EnablePresence(
bEnable ? VARIANT_TRUE : VARIANT_FALSE, varStorage);
VariantClear(&varStorage);