public void AcceptFromInbox(RealTimeMultiplayerListener listener) { var listenerOnGameThread = new OnGameThreadForwardingListener(listener); lock (mSessionLock) { if (GetRoomStatus() == RoomStatus.Active) { OurUtils.Logger.e("Received attempt to accept invitation without cleaning up " + "active session."); listenerOnGameThread.OnRoomConnected(false); return; } AndroidHelperFragment.ShowInvitationInboxUI((status, invitation) => { if (status == UIStatus.NotAuthorized) { mAndroidClient.SignOut((() => listenerOnGameThread.OnRoomConnected(false))); return; } if (status != UIStatus.Valid) { OurUtils.Logger.d("User did not complete invitation screen."); listenerOnGameThread.OnRoomConnected(false); return; } mInvitation = invitation; AcceptInvitation(mInvitation.InvitationId, listener); }); } }
public RoomUpdateCallbackProxy(AndroidRealTimeMultiplayerClient parent, OnGameThreadForwardingListener listener) : base( "com/google/games/bridge/RoomUpdateCallbackProxy$Callback") { mListener = listener; mParent = parent; }
internal RoomSession(RealtimeManager manager, RealTimeMultiplayerListener listener) { mManager = Misc.CheckNotNull(manager); mListener = new OnGameThreadForwardingListener(listener); EnterState(new BeforeRoomCreateStartedState(this), false); mStillPreRoomCreation = true; }
public void AcceptInvitation(string invitationId, RealTimeMultiplayerListener listener) { var listenerOnGameThread = new OnGameThreadForwardingListener(listener); lock (mSessionLock) { if (GetRoomStatus() == RoomStatus.Active) { OurUtils.Logger.e("Received attempt to accept invitation without cleaning up " + "active session."); listenerOnGameThread.OnRoomConnected(false); return; } FindInvitation(invitationId, fail => listenerOnGameThread.OnRoomConnected(false), invitation => { mInvitation = invitation; using (var roomConfigClass = new AndroidJavaClass("com.google.android.gms.games.multiplayer.realtime.RoomConfig")) using (var roomUpdateCallback = new AndroidJavaObject( "com.google.games.bridge.RoomUpdateCallbackProxy", new RoomUpdateCallbackProxy(/* parent= */ this, listenerOnGameThread))) using (var roomConfigBuilder = roomConfigClass.CallStatic <AndroidJavaObject>("builder", roomUpdateCallback)) using (var messageReceivedListener = new AndroidJavaObject( "com.google.games.bridge.RealTimeMessageReceivedListenerProxy", new MessageReceivedListenerProxy(listenerOnGameThread))) using (roomConfigBuilder.Call <AndroidJavaObject>("setOnMessageReceivedListener", messageReceivedListener)) using (var roomStatusUpdateCallback = new AndroidJavaObject("com.google.games.bridge.RoomStatusUpdateCallbackProxy", new RoomStatusUpdateCallbackProxy(this, listenerOnGameThread))) using (roomConfigBuilder.Call <AndroidJavaObject>("setRoomStatusUpdateCallback", roomStatusUpdateCallback)) using (roomConfigBuilder.Call <AndroidJavaObject>("setInvitationIdToAccept", invitationId)) { mRoomConfig = roomConfigBuilder.Call <AndroidJavaObject>("build"); mListener = listenerOnGameThread; using (var task = mRtmpClient.Call <AndroidJavaObject>("join", mRoomConfig)) { AndroidTaskUtils.AddOnFailureListener( task, e => { listenerOnGameThread.OnRoomConnected(false); CleanSession(); }); } } }); } }
private void CleanSession() { lock (mSessionLock) { mRoom = null; mRoomConfig = null; mListener = null; mInvitation = null; mMinPlayersToStart = 0; } }
public MessageReceivedListenerProxy(OnGameThreadForwardingListener listener) : base( "com/google/games/bridge/RealTimeMessageReceivedListenerProxy$Callback") { mListener = listener; }
public void CreateQuickGame(uint minOpponents, uint maxOpponents, uint variant, ulong exclusiveBitMask, RealTimeMultiplayerListener listener) { var listenerOnGameThread = new OnGameThreadForwardingListener(listener); lock (mSessionLock) { if (GetRoomStatus() == RoomStatus.Active) { OurUtils.Logger.e("Received attempt to create a new room without cleaning up the old one."); listenerOnGameThread.OnRoomConnected(false); return; } // build room config using (var roomConfigClass = new AndroidJavaClass("com.google.android.gms.games.multiplayer.realtime.RoomConfig")) using (var roomUpdateCallback = new AndroidJavaObject( "com.google.games.bridge.RoomUpdateCallbackProxy", new RoomUpdateCallbackProxy(/* parent= */ this, listenerOnGameThread))) using (var roomConfigBuilder = roomConfigClass.CallStatic <AndroidJavaObject>("builder", roomUpdateCallback)) { if (variant > 0) { roomConfigBuilder.Call <AndroidJavaObject>("setVariant", (int)variant); } using (var autoMatchCriteria = roomConfigClass.CallStatic <AndroidJavaObject>( "createAutoMatchCriteria", (int)minOpponents, (int)maxOpponents, (long)exclusiveBitMask)) using (roomConfigBuilder.Call <AndroidJavaObject>("setAutoMatchCriteria", autoMatchCriteria)) ; using (var messageReceivedListener = new AndroidJavaObject( "com.google.games.bridge.RealTimeMessageReceivedListenerProxy", new MessageReceivedListenerProxy(listenerOnGameThread))) using (roomConfigBuilder.Call <AndroidJavaObject>("setOnMessageReceivedListener", messageReceivedListener)) ; using (var roomStatusUpdateCallback = new AndroidJavaObject( "com.google.games.bridge.RoomStatusUpdateCallbackProxy", new RoomStatusUpdateCallbackProxy(this, listenerOnGameThread))) using (roomConfigBuilder.Call <AndroidJavaObject>("setRoomStatusUpdateCallback", roomStatusUpdateCallback)) ; mRoomConfig = roomConfigBuilder.Call <AndroidJavaObject>("build"); mListener = listenerOnGameThread; } mMinPlayersToStart = (int)minOpponents + 1; using (var task = mRtmpClient.Call <AndroidJavaObject>("create", mRoomConfig)) { AndroidTaskUtils.AddOnFailureListener( task, e => { listenerOnGameThread.OnRoomConnected(false); CleanSession(); }); } } }
public void CreateWithInvitationScreen(uint minOpponents, uint maxOpponents, uint variant, RealTimeMultiplayerListener listener) { var listenerOnGameThread = new OnGameThreadForwardingListener(listener); lock (mSessionLock) { if (GetRoomStatus() == RoomStatus.Active) { OurUtils.Logger.e("Received attempt to create a new room without cleaning up the old one."); listenerOnGameThread.OnRoomConnected(false); return; } AndroidHelperFragment.ShowRtmpSelectOpponentsUI(minOpponents, maxOpponents, (status, result) => { if (status == UIStatus.NotAuthorized) { mAndroidClient.SignOut((() => { listenerOnGameThread.OnRoomConnected(false); CleanSession(); })); return; } if (status != UIStatus.Valid) { listenerOnGameThread.OnRoomConnected(false); CleanSession(); return; } using (var roomConfigClass = new AndroidJavaClass("com.google.android.gms.games.multiplayer.realtime.RoomConfig")) using (var roomUpdateCallback = new AndroidJavaObject( "com.google.games.bridge.RoomUpdateCallbackProxy", new RoomUpdateCallbackProxy(/* parent= */ this, listenerOnGameThread))) using (var roomConfigBuilder = roomConfigClass.CallStatic <AndroidJavaObject>("builder", roomUpdateCallback)) { if (result.MinAutomatchingPlayers > 0) { using (var autoMatchCriteria = roomConfigClass.CallStatic <AndroidJavaObject>( "createAutoMatchCriteria", result.MinAutomatchingPlayers, result.MaxAutomatchingPlayers, /* exclusiveBitMask= */ (long)0)) using (roomConfigBuilder.Call <AndroidJavaObject>("setAutoMatchCriteria", autoMatchCriteria)) ; } if (variant != 0) { using (roomConfigBuilder.Call <AndroidJavaObject>("setVariant", (int)variant)); } using (var messageReceivedListener = new AndroidJavaObject( "com.google.games.bridge.RealTimeMessageReceivedListenerProxy", new MessageReceivedListenerProxy(listenerOnGameThread))) using (roomConfigBuilder.Call <AndroidJavaObject>("setOnMessageReceivedListener", messageReceivedListener)) ; using (var roomStatusUpdateCallback = new AndroidJavaObject("com.google.games.bridge.RoomStatusUpdateCallbackProxy", new RoomStatusUpdateCallbackProxy(this, listenerOnGameThread))) using (roomConfigBuilder.Call <AndroidJavaObject>("setRoomStatusUpdateCallback", roomStatusUpdateCallback)) ; using (roomConfigBuilder.Call <AndroidJavaObject>("addPlayersToInvite", AndroidJavaConverter.ToJavaStringList(result.PlayerIdsToInvite))) { mRoomConfig = roomConfigBuilder.Call <AndroidJavaObject>("build"); } mListener = listenerOnGameThread; } // the min number to start is the number of automatched + the number of named invitations + // the local player. mMinPlayersToStart = result.MinAutomatchingPlayers + result.PlayerIdsToInvite.Count + 1; using (var task = mRtmpClient.Call <AndroidJavaObject>("create", mRoomConfig)) { AndroidTaskUtils.AddOnFailureListener( task, exception => { listenerOnGameThread.OnRoomConnected(false); CleanSession(); }); } }); } }