我正在實施谷歌玩遊戲服務的實時多人遊戲。檢測其他玩家是否無意中離開(例如互聯網斷開)並重新連接 - Google玩實時多人遊戲
目前如果我關閉一個客戶端的WIFI,另一個客戶端不會檢測到連接丟失。沒有PeerDisconnect事件被調用。
1 - API是否提供任何內容來檢查對等體是否仍然連接?
2 - 有什麼辦法讓玩家重新連接到房間?
我正在實施谷歌玩遊戲服務的實時多人遊戲。檢測其他玩家是否無意中離開(例如互聯網斷開)並重新連接 - Google玩實時多人遊戲
目前如果我關閉一個客戶端的WIFI,另一個客戶端不會檢測到連接丟失。沒有PeerDisconnect事件被調用。
1 - API是否提供任何內容來檢查對等體是否仍然連接?
2 - 有什麼辦法讓玩家重新連接到房間?
1 - API是否提供任何內容來檢查對方是否仍然連接?
如Connecting players所述,您可以使用RoomStatusUpdateListener
回調來監視與會者的連接狀態。如上所述:
要在所有玩家連線時得到通知,您的遊戲可以使用
RoomUpdateListener.onRoomConnected()
回撥。您的遊戲也可以使用RoomStatusUpdateListener
回調來監控參與者的連接狀態。根據參與者連接狀態,您的遊戲可以決定是啓動還是取消遊戲會話。
2 - 有什麼辦法讓玩家重新連接到房間嗎?
實時多人遊戲 - Gameplay指出:
一旦需要參加一個房間的數量已經連接,房間被認爲是「充滿」和遊戲可以開始了。參與者加入房間後,您的遊戲可以讓他們離開房間(有效地將他們從遊戲中刪除)。但是,沒有新玩家可以在「填充」之後加入房間(甚至不填補參與者騰空的地點)。
除此之外,參照best practice for Real-time multiplayer:
如果不恰當地離開房間,谷歌Play遊戲服務將繼續事件,並邀請通知發送到客戶端。每當發生以下情況之一時,您應該離開活躍房間:
- 遊戲結束(例如,玩家贏得了比賽)。
- 當你的遊戲進入後臺。
- 在Android上,離開房間時:
- 玩家取消等候室UI中的遊戲。
- 在
onActivityResult()
回調中返回的響應代碼是GamesActivityResultCodes.RESULT_LEFT_ROOM
。- 活動
onStop()
被調用。這可能表示您的 活動正在銷燬。在這種情況下,請離開房間並致電disconnect()
。
希望這些鏈接涵蓋了所有的顧慮。快樂的編碼! :)
1 - 謝謝我會研究,即如果其互聯網關閉參與者的連接狀態更改爲其他參與者。 2 - 所以簡單的答案是離開後無法重新連接到同一個房間。 :) – Uzi
更新:測試您的解決方案的第一個問題----當參與者的互聯網連接斷開連接,甚至當它只是在數據和Wifi之間切換時,參與者的連接狀態不會改變。它仍然顯示參與者已連接,直到您呼叫另一位參與者的離開房間。但是你現在不能發送任何消息! – Uzi
我有同樣的問題,是的,實現RoomStatusUpdateListener回調作爲@Teyam建議並沒有幫助。當對等體失去連接時,API不調用任何回調。我打算通過在客戶端上設置看門狗定時器來解決這個問題,這些客戶端反覆ping對方以查看它們是否仍然連接。 – nradk