Example #1
0
        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);
                });
            }
        }
Example #2
0
 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;
 }
Example #4
0
        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();
                                                        });
                                                    }
                                                }
                });
            }
        }
Example #5
0
 private void CleanSession()
 {
     lock (mSessionLock)
     {
         mRoom              = null;
         mRoomConfig        = null;
         mListener          = null;
         mInvitation        = null;
         mMinPlayersToStart = 0;
     }
 }
Example #6
0
 public MessageReceivedListenerProxy(OnGameThreadForwardingListener listener) : base(
         "com/google/games/bridge/RealTimeMessageReceivedListenerProxy$Callback")
 {
     mListener = listener;
 }
Example #7
0
        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();
                    });
                }
            }
        }
Example #8
0
        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();
                        });
                    }
                });
            }
        }