程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 微軟實時通信API多客戶端通信實戰(3)

微軟實時通信API多客戶端通信實戰(3)

編輯:vc教程

創建 XML 配置文件

  以下代碼演示如何創建 XML 配置文件字符串。

HRESULT CSIPLogin::CreateXMLProvision(LPSTR szURI, LPSTR szSIPIP,
LPSTR szTransport, BSTR *bstrBuf)
{
... .

// 生成 XML 裝置文檔
wsprintf(szBuf, "<provision key="AVDConf_2" name="AVDConf_2">"
"<user uri="%s" account="" passWord="" realm="%s" />"
"<sipsrv addr="%s" protocol="%s" %s role="proxy">"
"<&&keyWord=session&Submit=+%CB%D1%CB%F7+">session party="first" type="pc2pc" />"
"<&&keyWord=session&Submit=+%CB%D1%CB%F7+">session party="first" type="pc2ph" />"
"<&&keyWord=session&Submit=+%CB%D1%CB%F7+">session party="first" type="im" />"
"</sipsrv>"
"<sipsrv addr="%s" protocol="%s" %s role="registrar"/>"
"</provision>",
szURIBuf, szRealm,
szSIPIP, szTransport, bBasicAuth ? "auth="basic"" : "",
szSIPIP, szTransport, bBasicAuth ? "auth="basic"" : ""
);

... .

return S_OK;
}
 
  在本文前面顯示的示例應用程序和代碼片段中,無須包括帳戶用戶 ID 和密碼,因為 SIP 服務器不需要它。但是,如果知道 SIP 服務器需要登錄帳戶,則可以在配置文件字符串中包括用戶 ID 和密碼,以便登錄到 SIP 服務器。注冊需要的信息包括用戶的統一資源標識符 (URI)、領域或域、RTC 服務器 IP、驗證方法以及用於與服務器通信的傳輸協議。支持的傳輸協議包括 TCP、UDP 和 TLS。使用的 SIP 服務器同時支持“基本”和“摘要”身份驗證。如果是“基本”身份驗證,則傳輸協議必須是 TLS(出於安全考慮)。

  創建好友列表和觀察程序對象

  注冊配置文件並啟用出席信息後,向好友列表添加新用戶將非常簡單。使用 IRTCClIEntPresence &&接口(提供啟用出席的方法)、添加好友、刪除好友、枚舉觀察程序、設置本地出席狀態、確定應用程序處理新觀察程序中訂閱的方法以及設置隱私模式。本示例代碼未演示如何實現隱私模式,但值得注意的是,通過該功能用戶可以創建一個允許呼叫的用戶的離散列表。


// 獲取 RTC 客戶端出席信息&&接口

IRTCClIEntPresence * pPresence = NULL;

hr = m_pClIEnt->QueryInterface(
IID_IRTCClIEntPresence,
(void **)&pPresence);

if (FAILED(hr))
{
// QueryInterface 失敗
char szBuf[256];

wsprintf (szBuf, "Failed to Query Presence Interface Err = 0x%x", hr );
MessageBox ( szBuf );
return hr;
}

// 添加好友
IRTCBuddy * pBuddy = NULL;

hr = pPresence->AddBuddy(
bstrURI,
bstrName,
NULL,
VARIANT_TRUE,
NULL,
0,
&pBuddy);

SAFE_RELEASE(pPresence);

if (FAILED(hr))
{
// Addbuddy 失敗
SAFE_RELEASE(pBuddy);
char szBuf[256];

wsprintf (szBuf, "Failed to Add Buddy to List. Err = 0x%x", hr );
MessageBox ( szBuf );
return hr;
}

// 更新好友列表條目
UpdateBuddyList(pBuddy);
SAFE_RELEASE(pBuddy);
 


  如果成功創建了新的好友,AddBuddy() 方法將返回一個&&keyword=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指針,該&&keyWord=%D6%B8%D5%EB&Submit=+%CB%D1%CB%F7+">指針指向新創建的好友列表中的 IRTCBuddy &&接口。使用 IRTCBuddy &&接口,客戶端應用程序可以獲取好友的出席 URI、好友名稱、好友狀態、永久類型以及與好友出席相關的私人數據。

  取消注冊和禁用配置文件

  調用 IRTCClIEntProvisioning::DisableProfile() 方法取消注冊 SIP 服務器中的用戶。在調用 DisableProfile() 方法後,請務必釋放配置文件對象。

  優化性能

  在基於 Pentium 4 處理器的系統中,後台任務要占用大量的資源。但是,應用程序的響應性能主要受其體系結構的影響。要解決此問題,需要創建一些線程,讓它們並行並為其他需要立即關注的活動提供服務。在帶有超線程技術和 Windows XP Service Pack 1 (SP1) 的 Pentium 4 處理器上運行多線程應用程序,能夠大大改善應用程序的響應性能,並使應用程序能夠更有效地執行多個任務。

  Windows XP SP1 將帶有超線程技術的 Pentium 4 處理器看作兩個邏輯處理器,因而與單個邏輯 CPU 相比,Windows XP 可以承擔兩倍的工作。


圖 4:使用超線程技術(左)和未使用超線程技術(右)運行的示例用戶界面

  圖 4 說明了後台運行磁盤清理實用程序時,使用和不使用超線程技術的 Pentium 4 處理器的 CPU 使用情況對比。

  小結

  通過實時通信 (RTC) API,可以生成全功能的會議和協作工具,不管是從計算機到計算機、從計算機到電話還是從電話到電話的通信。在本文中,我們進一步擴展到包括出席信息和好友列表功能,以創建社區和跟蹤人員的可用性。結合大量的 RTC API 和 Microsoft 實時通信服務器,您可以生成復雜、有效的協作通信工具,此工具能夠增加跨站點團隊的工作效率。

  使用 RTC API 開發並運行在 Pentium 4 處理器(帶有超線程技術和 Windows XP SP1)中的通信應用程序,在同時執行多項任務時可以實現較高的通信速度和改善的響應性能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved