South Gamedev Weekend
Real-Time мультиплеер с использованием Play Games Services
Почему нужно использовать именно это решение
1. Поддерживается Google
2. Безопасность и надёжность
3. Интеграция с другими продуктами Google
Комната
Participant
Participant
Participant
Participant
Participant
Participant
ParticipantParticipant
MESSAGING
PROTOCOL
Надёжный
● Целостность данных
● Порядок
● Гарантия доставки
● Повышенный пинг
● 1400 байт
Ненадёжный
● Целостность данных
● 1186 байт
Автоподбор
Смешанная
По приглашениям
import com.google.android.gms.games.multiplayer.realtime.*;
// ...
RoomConfig.Builder roomConfigBuilder = RoomConfig.builder(new RoomUpdateListener() { /* … */ });
roomConfigBuilder.setAutoMatchCriteria(RoomConfig.createAutoMatchCriteria(1, 1, 0));
Games.RealTimeMultiplayer.create(getApiClient(), roomConfigBuilder.build());
// ...
onRoomCreated
onJoinedRoom
onLeftRoom
onRoomConnected
Комната заполнена
RealTimeMultiplayer.create(...)
RealTimeMultiplayer.join(...)
RealTimeMultiplayer.leave(...)
...
RoomUpdateListener
import com.google.android.gms.games.multiplayer.realtime.*;
// ...
RoomConfig.Builder roomConfigBuilder = RoomConfig.builder(new RoomUpdateListener() { /* … */ });
roomConfigBuilder.setAutoMatchCriteria(RoomConfig.createAutoMatchCriteria(1, 1, 0));
roomConfigBuilder.setVariant(1);
roomConfigBuilder.setMessageReceivedListener(new RealTimeMessageReceivedListener() { /* ... */ });
roomConfigBuilder.setRoomStatusUpdateListener(new RoomStatusUpdateListener() { /* ... */ });
Games.RealTimeMultiplayer.create(getApiClient(), roomConfigBuilder.build());
// ...
import com.google.android.gms.games.multiplayer.realtime.*;
public class RoomStatusUpdater implements RoomStatusUpdateListener {
// ...
@Override
public void onPeersConnected(Room room, List<String> list) {
String roomId = room.getRoomId();
byte[] message = "hello".getBytes();
int size = list.size();
for(int index = 0; index < size; ) {
String participantId = list.get(index++);
RealTimeMultiplayer.sendReliableMessage(getApiClient(), null, message, roomId, participantId);
}
}
// ...
}
import com.google.android.gms.games.multiplayer.realtime.*;
public class RoomStatusUpdater implements RoomStatusUpdateListener, RealTimeMessageReceivedListener {
// ...
@Override
public void onRealTimeMessageReceived(RealTimeMessage realTimeMessage) {
Log.w("Multiplayer", format("Message from %s!", realTimeMessage.getSenderParticipantId()));
Log.w("Multiplayer", new String(realTimeMessage.getMessageData()));
}
// ...
}
● goo.gl/38oaxt - пример реализации с использованием приглашений и
встроенного UI
● goo.gl/MXskDc - пример реализации turn-based игры
● goo.gl/zPHvGp - официальное описание принципов работы (и ссылки на
реализации под конкретные платформы)
● goo.gl/yNy1iT - javadoc
● moikrug.ru/seroperson - я на “моём круге”

Мультиплеер с использованием Google Play Games