如何使用客戶端

定時器循環、RMI、事件處理

根據客戶端的主循環,客戶端可以定期呼叫FrameMove來執行累積的RMI接收並處理事件處理。

您不一定要每秒調用FrameMove,但如果太長時間不調用,從客戶端接收到的RMI就會累積並增加記憶體使用量。

獲取各種資訊

客戶端可以檢索各種訊息,例如P2P群組資訊、P2P連線的客戶端的IP資訊、與伺服器的連線狀態以及是否正在與P2P連線的客戶端執行P2P中繼。

C++ 函數
C# 函數
註釋

Proud.CNetClient.GetGroupMembers

Nettention.Proud.NetClient.NativeNetClient.GetGroupMembers

檢索與作為參數給出的 HostID 對應的群組中的所有使用者。

Proud.CNetClient.GetIndirectServerTimeMs

Nettention.Proud.NetClient.NativeNetClient.GetIndirectServerTimeMs

取得以 HostID 為參數輸入的對等方的伺服器時間。

Proud.CNetClient.GetLastUnreliablePingMs

Nettention.Proud.NetClient.GetLastUnreliablePingMs

取得以 HostID 為參數輸入的對等方的最後 ping 時間。

Proud.CNetClient.GetLocalHostID

Nettention.Proud.NetClient.GetLocalHostID

取得客戶端的本機 HostID。

Proud.CNetClient.GetLocalJoinedP2PGroups

Nettention.Proud.NetClient.GetLocalJoinedP2PGroups

取得所有加入的 p2p 群組的清單。

Proud.CNetClient.GetP2PServerTimeMs

Nettention.Proud.NetClient.NativeNetClient.GetP2PServerTimeMs

取得 p2p 連線伺服器的時間(以毫秒為單位)。

Proud.CNetClient.GetPeerInfo

Nettention.Proud.NetClient.GetPeerInfo

取得有關連接到客戶端的對等點的資訊。

Proud.CNetClient.GetPeerReliableUdpStats

Nettention.Proud.NetClient.NativeNetClient.GetPeerReliableUdpStats

取得 P2P 之間可靠的訊息系統運行統計資料。 (用於效能測量或調試)

Proud.CNetClient.GetRecentUnreliablePingMs

Nettention.Proud.NetClient.GetRecentUnreliablePingMs

傳回最近的 ping 時間(以毫秒為單位)。

Proud.CNetClient.GetServerAddrPort

Nettention.Proud.NetClient.NativeNetClient.GetServerAddrPort

取得連接的伺服器的位址。

Proud.CNetClient.GetServerConnectionState

Nettention.Proud.NetClient.GetServerConnectionState

取得與伺服器的套接字連線的狀態。

Proud.CNetClient.GetServerTimeMs

Nettention.Proud.NetClient.NativeNetClient.GetServerTimeMs

取得伺服器上的當前時間。

Proud.CNetClient.GetServerTimeDiffMs

Nettention.Proud.NetClient.NativeNetClient.GetServerTimeDiffMs

找出客戶端和伺服器之間的時間差。

伺服器連接期間發送和接收自訂數據

  • 當您在 Connect 中填寫自訂欄位參數時, 內容是從 OnConnectionRequest 接收的。

  • 如果在OnConnectionRequest中填入自訂回覆參數, 內容是從 OnJoinServerComplete 接收的。

取得打孔地址

  1. 首先,完成P2P通訊。

  2. 使用 GetPeerInfoGetClientInfo 取得客戶端資訊。

  3. 取得到的資訊中的udpAddrFromServer為打洞位址。

參考 P2P 通訊

取得伺服器時間

ProudNet可讓您從伺服器取得時間以實現主機之間的時間同步。

C++ 函數
C# 函數
註釋

Proud.CNetClient.GetServerTimeMs

Nettention.Proud.NetClient.GetServerTimeMs

與伺服器計算延遲以獲得伺服器的實際時間。

Proud.CNetClient.GetP2PServerTimeMs

Nettention.Proud.NativeNetClient.GetP2PServerTimeMs

一種取得伺服器延遲、計算其他 P2P 連線客戶端延遲並取平均值的方法。 更準確地說,您可以獲得伺服器上的實際時間。

回呼中途斷開

當呼叫 FrameMove 時,將立即呼叫所有累積的事件和接收到的 RMI。

如果使用者願意,ProudNet 能夠在單一 FrameMove 呼叫部分的處理過程中傳回累積事件和接收到的 RMI。 然後,它允許在下一個 FrameMove 呼叫中處理剩餘的累積事件和接收到的 RMI。

若要終止剩餘的累積事件和接收的 RMI,請從正在處理 RMI 接收的例程或正在處理事件接收的例程呼叫 HolsterMoreCallbackUntilNextFrameMove

DEFRMI_TestS2C_Foo(CMyClient)
{
    ...
    /* 當您呼叫此函數時,CNetClient.FrameMove 立即傳回,
    忽略任何剩餘的累積事件和 RMI 接收。 */
    m_netClient->HolsterMoreCallbackUntilNextFrameMove();
}
 
void CMyClient::OnLeaveServer(...)
{
    ...
    /* 當您呼叫此函數時,CNetClient.FrameMove 立即傳回,
    忽略任何剩餘的累積事件和 RMI 接收。 */
    m_netClient->HolsterMoreCallbackUntilNextFrameMove();
}

保留回呼

當各種事件和RMI接收被FrameMove回調時,有一個函數允許稍後再次發生所需的回調,稱為保留回呼。 如果您暫停回調,則待處理的回呼將轉到累積接收佇列的後面,並且下次呼叫 FrameMove 時回呼會再次發生。

例如,如果您按住Callback B,則回調將執行如下所示。

FrameMove => Callback A => Callback B (保留!) => 返回

FrameMove => Callback B(回放被擱置的內容) => ... => 返回

如果這個回呼函數沒有被準確理解和誤用,可能會被誤解為接收到的RMI或事件沒有按正確的順序到達或發生無限回呼。 因此,使用時需謹慎。

若要掛起回調,只需從處理 RMI 接收的程式或處理事件接收的例程中呼叫 Proud.INetClientEvent.PostponeThisCallbackProud.IRmiStub.PostponeThisCallback 即可。

DEFRMI_TestS2C_Foo(CMyClient)
{
    ...
    /* 當您呼叫此函數時,CNetClient.FrameMove 立即傳回,
    忽略任何剩餘的累積事件和 RMI 接收。 */
    PostponeThisCallback();
}
 
void CMyClient::OnLeaveServer(...)
{
    ...
    /* 當您呼叫此函數時,CNetClient.FrameMove 立即傳回,
    忽略任何剩餘的累積事件和 RMI 接收。 */
    PostponeThisCallback();
}


Last updated