private void InternalSend(List <string> recipientEndpointIds, byte[] payload)
        {
            Misc.CheckNotNull(recipientEndpointIds);
            Misc.CheckNotNull(payload);

            using (var payloadClass = new AndroidJavaClass("com.google.android.gms.nearby.connection.Payload"))
                using (var payloadObject = payloadClass.CallStatic <AndroidJavaObject>("fromBytes", payload))
                    using (var task = mClient.Call <AndroidJavaObject>("sendPayload",
                                                                       AndroidJavaConverter.ToJavaStringList(recipientEndpointIds),
                                                                       payloadObject))
                        ;
        }
Esempio n. 2
0
        public void CreateWithInvitationScreen(uint minOpponents, uint maxOpponents, uint variant,
                                               RealTimeMultiplayerListener listener)
        {
            lock (mSessionLock)
            {
                if (GetRoomStatus() == RoomStatus.Active)
                {
                    OurUtils.Logger.e("Received attempt to create a new room without cleaning up the old one.");
                    listener.OnRoomConnected(false);
                    return;
                }

                AndroidHelperFragment.ShowRtmpSelectOpponentsUI(minOpponents, maxOpponents,
                                                                (status, result) =>
                {
                    if (status != UIStatus.Valid)
                    {
                        listener.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, listener)))
                            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(listener)))
                                    using (roomConfigBuilder.Call <AndroidJavaObject>("setOnMessageReceivedListener",
                                                                                      messageReceivedListener))
                                        ;

                                using (var roomStatusUpdateCallback =
                                           new AndroidJavaObject("com.google.games.bridge.RoomStatusUpdateCallbackProxy",
                                                                 new RoomStatusUpdateCallbackProxy(this, listener)))
                                    using (roomConfigBuilder.Call <AndroidJavaObject>("setRoomStatusUpdateCallback",
                                                                                      roomStatusUpdateCallback))
                                        ;

                                using (roomConfigBuilder.Call <AndroidJavaObject>("addPlayersToInvite",
                                                                                  AndroidJavaConverter.ToJavaStringList(result.PlayerIdsToInvite)))
                                {
                                    mRoomConfig = roomConfigBuilder.Call <AndroidJavaObject>("build");
                                }

                                mListener = listener;
                            }

                    // 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 =>
                        {
                            listener.OnRoomConnected(false);
                            CleanSession();
                        });
                    }
                });
            }
        }