微软实时通信API多客户端通信实战(2)[图](3)
if (FAILED(hr))
{
// EnablePresence 失败
SAFE_RELEASE(pPresence);
return hr;
}
// 设置启用标志
m_bPresenceEnabled = bEnable;
// 如果禁用出席信息,则清理
// 出席信息数据
if (!bEnable)
{
// 清理好友
IRTCEnumBuddies * pEnumBuddy = NULL;
IRTCBuddy * pBuddy = NULL;
if (FAILED(hr))
{
// 枚举好友失败
SAFE_RELEASE(pPresence);
return hr;
}
// 枚举用户的好友列表。
hr = pPresence->EnumerateBuddies(&pEnumBuddy);
if (FAILED(hr))
{
// 枚举好友失败
SAFE_RELEASE(pPresence);
return hr;
}
while (pEnumBuddy->Next(1, &pBuddy, NULL) == S_OK)
{
pPresence->RemoveBuddy(pBuddy);
SAFE_RELEASE(pBuddy);
}
SAFE_RELEASE(pEnumBuddy);
// 清理观察程序
IRTCEnumWatchers * pEnumWatcher = NULL;
IRTCWatcher * pWatcher = NULL;
hr = pPresence->EnumerateWatchers(&pEnumWatcher);
if (FAILED(hr))
{
// 枚举观察程序失败
SAFE_RELEASE(pPresence);
return hr;
}
while (pEnumWatcher->Next(1, &pWatcher, NULL) == S_OK)
{
pPresence->RemoveWatcher(pWatcher);
SAFE_RELEASE(pWatcher);
}
SAFE_RELEASE(pEnumWatcher);
}
SAFE_RELEASE(pPresence);
return S_OK;
}