2013-07-11 11 views
5

Trong trò chơi nhiều người chơi của tôi, tôi có 2 đối thủ. Làm cách nào để 1 người ngang hàng được thông báo khi người khác có sự cố/ngắt kết nối mạng? Tôi đã mong rằng onPeerLeft hoặc onPeersDisconnected bị sa thải, nhưng không có gì!Dịch vụ của Google Play: cách xử lý ngắt kết nối mạng ngang hàng?

Trên thực tế tôi sẽ thực hiện một số loại cơ chế ping để nếu một đẳng không nhận được thông báo ping trong một thời gian nhất định tôi có thể ném một cái gì đó cho người sử dụng (Một hộp thoại xác định rằng đối thủ bị ngắt kết nối.)

Thay vào đó, có một cuộc gọi lại để lắng nghe khi loại vấn đề này không?

Trên ngang ngắt kết nối Tôi đang sử dụng onRealTimeMessageSent callback để phát hiện nếu peer không thể gửi dữ liệu, như sau:

@Override 
public void onRealTimeMessageSent(int statusCode, int token, String arg2) { 
    //f the peer can't send data 
    if (statusCode == GamesClient.STATUS_REAL_TIME_MESSAGE_SEND_FAILED) { 
     //here I show an error dialog and move out of game 
    } 
} 

Trên ngang hàng khác, không có callbacks khác được nâng lên (ví dụ như onPeerLeft hoặc onPeersDisconnected)

Bất kỳ đề xuất nào? Cảm ơn trước!

+0

ok, cuối cùng tôi đã chọn cho một cơ chế ping-pong với một 'Timer' sheduling một' Timertask' mỗi 5 giây trong cuộc gọi lại 'onRoomConnected'. Sau đó, tôi kiểm tra thời gian ping nhận được cuối cùng trước khi gửi tin nhắn mới, nếu thời gian trôi qua lớn hơn thời gian ping, sau đó tôi có thể ném thông báo lỗi thích hợp. Bất kỳ đề xuất nào khác đều được hoan nghênh! –

Trả lời

0

Âm thanh như bạn có thể không được gọi setRoomStatusUpdateListener (RoomStatusUpdateListener) trước khi gọi builder.build()

Edit: nơi xây dựng là RoomConfig.Builder bạn

+0

Có, tôi đang đặt người nghe cả trên lời mời nhận được và kết quả hoạt động từ ý định người chơi chọn trước khi gọi 'build()'. 'onPeerLeft' và các phương thức ghi đè khác được gọi nếu kết nối mạng là ok !. Nhưng đây không phải là trường hợp. Với một trao đổi ping tôi có thể theo dõi nếu tôi đang gửi và nhận dữ liệu chính xác trong một khoảng thời gian. –

+0

onPeerDisconnected nên được gọi nếu người chơi khác bị buộc phải ngắt kết nối với máy chủ, onPeerLeft sẽ chỉ được gọi nếu người chơi có ý định bỏ thuốc lá. Bạn có thể thử đặt một Bánh mì nướng trên mỗi phương thức giao diện để bạn có thể thấy khi nào chúng được gọi. – mmizzle9

0

Các ngang hàng từ xa sẽ không nhận được bất kỳ tin nhắn để chỉ ra bỏ kết nối. Điều này được thiết kế (vì vậy có thể xử lý mất tín hiệu tạm thời).

này được xác nhận bởi một đại diện của Google ở ​​đây:

https://github.com/playgameservices/cpp-android-basic-samples/issues/53

Tôi đã thực hiện một thời gian chờ dựa ping.