如何連線至對等群組
本主題討論應用程式如何使用對等群組 API 連線至對等群組。
加入對等群組
若要加入對等群組,請呼叫 PeerGroupJoin,如果邀請中的雲端名稱模棱兩可) ,則傳入對等的身分識別名稱和邀請 (和選擇性的 PNRP 雲端名稱。
如果成功, PeerGroupJoin 會傳回對等群組的控制碼。
如果對等先前已加入對等群組,然後關閉控制碼,則應該重新開啟對等群組,方法是呼叫 PeerGroupOpen 並傳入對等群組的名稱。 此呼叫會傳回新的對等群組控制碼。
成功加入對等群組之後,對等可能會直接連線到對等群組,並藉由呼叫 PeerGroupConnect開始互動。 連線之後,會將對等視為「線上」。
如果應用程式目前不會與群組互動,它可以保持「離線」。 如果它選擇在稍後的實例直接參與對等群組,後續對 PeerGroupConnect 的呼叫將會讓它上線。 對等加入對等群組之後,它至少必須連線一次,才能將記錄發佈至對等群組。
開啟對等群組而不連線 (離線)
通常,您可能想要讓應用程式連線到對等群組,但不會直接參與、接收和發佈記錄更新,但不會傳送或接收資料訊息。 呼叫 PeerGroupCreate、 PeerGroupJoin或 PeerGroupOpen 之後,應用程式會立即處於此「離線」狀態。
離線應用程式可以隨時透過呼叫 PeerGroupConnect來上線。 連線之後,對等群組將無法離線,直到與此身分識別相關聯的所有其他應用程式,以及共用此群組的連線也已關閉。
對等群組是共用資源,具有多個應用程式可用的相同對等群組。 如果相同身分識別和 Windows 使用者的多個應用程式使用相同的對等群組,它們也會共用相同的基礎資料庫和連線, (鄰近和直接) 。 如果其中任何一個應用程式呼叫 PeerGroupConnect,則參與群組之此身分識別/使用者的其他所有應用程式也會連線到群組。 如果在群組離線時由一個應用程式新增記錄,則其他應用程式也可以看到它。 因此,應用程式必須隨時準備好上線。
連線到對等群組 (Online)
若要開始參與群組,請在建立、加入或開啟群組之後呼叫 PeerGroupConnect 。 在此狀態下,您可以呼叫 PeerGroupOpenDirectConnection,以與其他參與相同群組的對等開啟直接連線。
若要偵測連線嘗試是否失敗,請註冊PEER_GROUP_EVENT_CONNECTION_FAILED事件。 如果群組基礎結構找不到要連線的另一個成員,或連線在同步處理群組資料庫之前失敗,而且無法建立另一個連線,就會引發此事件。
雖然在對等上執行且參與相同對等身分識別之相同群組的多個應用程式可能離線,但任一應用程式對 PeerGroupConnect 的呼叫會導致所有應用程式變成線上狀態。
此外,如果對等上的一個應用程式已連線到群組,呼叫 PeerGroupJoin 或 PeerGroupOpen 的任何其他應用程式也會立即連線。 如果應用程式呼叫 PeerGroupClose,則只會關閉該應用程式的控制碼。 因此,應用程式對 PeerGroupOpen 的後續呼叫會傳回新的群組控制碼,如果參與相同群組的任何其他應用程式仍然已連線,應用程式就會立即上線。
傳送及接收資料
若要在群組中的特定成員節點之間傳送和接收資料,必須與您想要互動的成員建立直接連線。 建立直接連線是 對 PeerGroupOpenDirectConnection的非同步呼叫,傳入連線群組的控制碼,以及您想要連線之群組內對等的身分識別。 這個方法會傳回連線識別碼。 如果呼叫成功,會在對等上引發PEER_GROUP_EVENT_DIRECT_CONNECTION事件,並驗證連線識別碼。
若要接收來自其他線上對等的直接連線,請使用 對 PeerGroupRegisterEvent的呼叫來註冊 PEER_GROUP_EVENT_DIRECT_CONNECTION 事件。
成功建立直接連線之後,應用程式就可以開始使用 對 PeerGroupSendData的呼叫來傳送資料,並傳遞有效的連線識別碼。 多部分資料傳輸的順序是由 PeerGroupSendData處理。 不過,應用程式應該實作適當的通訊協定堆疊來處理此 API 呼叫所傳回的不透明資料。
若要透過直接連線接收資料,應用程式必須向 PeerGroupRegisterEvent註冊PEER_GROUP_EVENT_INCOMING_DATA事件。 事件處理常式負責取得和排序不透明資料,並將它傳遞至應用程式。 透過呼叫 PeerGroupGetEventData 與已註冊事件的控制碼,即可在事件處理常式內取得此資料。
直接連線會藉由呼叫 PeerGroupCloseDirectConnection 並傳入先前呼叫 PeerGroupOpenDirectConnection 取得的連線識別碼,或在事件資料中收到PEER_EVENT_GROUP_DIRECT_CONNECTION。