Ejemplo n.º 1
0
        private void OnRealTimeMessageReceived(AndroidJavaObject message)
        {
            Logger.d("AndroidClient.OnRealTimeMessageReceived.");

            if (!CheckRtmpActive("OnRealTimeMessageReceived"))
            {
                return;
            }

            RealTimeMultiplayerListener listener = mRtmpListener;

            if (listener != null)
            {
                byte[] messageData;
                using (AndroidJavaObject messageBytes = message.Call <AndroidJavaObject>("getMessageData")) {
                    messageData = JavaUtil.ConvertByteArray(messageBytes);
                }
                bool   isReliable = message.Call <bool>("isReliable");
                string senderId   = message.Call <string>("getSenderParticipantId");

                PlayGamesHelperObject.RunOnGameThread(() => {
                    listener.OnRealTimeMessageReceived(isReliable, senderId, messageData);
                });
            }
            message.Dispose();
        }
Ejemplo n.º 2
0
        public static TurnBasedMatch ConvertMatch(string playerId, AndroidJavaObject matchObj)
        {
            List <AndroidJavaObject> list = new List <AndroidJavaObject>();

            Logger.d("AndroidTbmpClient.ConvertMatch, playerId=" + playerId);
            List <Participant> list2             = new List <Participant>();
            string             matchId           = matchObj.Call <string>("getMatchId", new object[0]);
            AndroidJavaObject  androidJavaObject = JavaUtil.CallNullSafeObjectMethod(matchObj, "getData", new object[0]);

            list.Add(androidJavaObject);
            byte[] data       = JavaUtil.ConvertByteArray(androidJavaObject);
            bool   canRematch = matchObj.Call <bool>("canRematch", new object[0]);
            int    availableAutomatchSlots = matchObj.Call <int>("getAvailableAutoMatchSlots", new object[0]);
            string selfParticipantId       = matchObj.Call <string>("getParticipantId", new object[]
            {
                playerId
            });
            AndroidJavaObject androidJavaObject2 = matchObj.Call <AndroidJavaObject>("getParticipantIds", new object[0]);

            list.Add(androidJavaObject2);
            int num = androidJavaObject2.Call <int>("size", new object[0]);

            for (int i = 0; i < num; i++)
            {
                string text = androidJavaObject2.Call <string>("get", new object[]
                {
                    i
                });
                AndroidJavaObject androidJavaObject3 = matchObj.Call <AndroidJavaObject>("getParticipant", new object[]
                {
                    text
                });
                list.Add(androidJavaObject3);
                Participant item = JavaUtil.ConvertParticipant(androidJavaObject3);
                list2.Add(item);
            }
            string pendingParticipantId = matchObj.Call <string>("getPendingParticipantId", new object[0]);

            TurnBasedMatch.MatchTurnStatus turnStatus  = JavaUtil.ConvertTurnStatus(matchObj.Call <int>("getTurnStatus", new object[0]));
            TurnBasedMatch.MatchStatus     matchStatus = JavaUtil.ConvertMatchStatus(matchObj.Call <int>("getStatus", new object[0]));
            int variant = matchObj.Call <int>("getVariant", new object[0]);

            foreach (AndroidJavaObject current in list)
            {
                if (current != null)
                {
                    current.Dispose();
                }
            }
            list2.Sort();
            return(new TurnBasedMatch(matchId, data, canRematch, selfParticipantId, list2, availableAutomatchSlots, pendingParticipantId, turnStatus, matchStatus, variant));
        }
Ejemplo n.º 3
0
        public void onResult(AndroidJavaObject result)
        {
            Logger.d("OnStateResultProxy.onResult, result=" + result);

            int statusCode = JavaUtil.GetStatusCode(result);

            Logger.d("OnStateResultProxy: status code is " + statusCode);

            if (result == null)
            {
                Logger.e("OnStateResultProxy: result is null.");
                return;
            }

            Logger.d("OnstateResultProxy: retrieving result objects...");
            AndroidJavaObject loadedResult = JavaUtil.CallNullSafeObjectMethod(result,
                                                                               "getLoadedResult");
            AndroidJavaObject conflictResult = JavaUtil.CallNullSafeObjectMethod(result,
                                                                                 "getConflictResult");

            Logger.d("Got result objects.");
            Logger.d("loadedResult = " + loadedResult);
            Logger.d("conflictResult = " + conflictResult);

            if (conflictResult != null)
            {
                Logger.d("OnStateResultProxy: processing conflict.");
                int    stateKey  = conflictResult.Call <int>("getStateKey");
                string ver       = conflictResult.Call <string>("getResolvedVersion");
                byte[] localData = JavaUtil.ConvertByteArray(JavaUtil.CallNullSafeObjectMethod(
                                                                 conflictResult, "getLocalData"));
                byte[] serverData = JavaUtil.ConvertByteArray(JavaUtil.CallNullSafeObjectMethod(
                                                                  conflictResult, "getServerData"));
                Logger.d("OnStateResultProxy: conflict args parsed, calling.");
                OnStateConflict(stateKey, ver, localData, serverData);
            }
            else if (loadedResult != null)
            {
                Logger.d("OnStateResultProxy: processing normal load.");
                int    stateKey  = loadedResult.Call <int>("getStateKey");
                byte[] localData = JavaUtil.ConvertByteArray(JavaUtil.CallNullSafeObjectMethod(
                                                                 loadedResult, "getLocalData"));
                Logger.d("OnStateResultProxy: loaded args parsed, calling.");
                OnStateLoaded(statusCode, stateKey, localData);
            }
            else
            {
                Logger.e("OnStateResultProxy: both loadedResult and conflictResult are null!");
            }
        }
Ejemplo n.º 4
0
        public static TurnBasedMatch ConvertMatch(string playerId, AndroidJavaObject matchObj)
        {
            List <AndroidJavaObject> toDispose = new List <AndroidJavaObject>();

            Logger.d("AndroidTbmpClient.ConvertMatch, playerId=" + playerId);

            string matchId;

            byte[]             data;
            bool               canRematch;
            int                availableAutomatchSlots;
            string             selfParticipantId;
            List <Participant> participants = new List <Participant>();
            string             pendingParticipantId;

            TurnBasedMatch.MatchTurnStatus turnStatus;
            TurnBasedMatch.MatchStatus     matchStatus;
            int variant;

            matchId = matchObj.Call <string>("getMatchId");
            AndroidJavaObject dataObj = JavaUtil.CallNullSafeObjectMethod(matchObj, "getData");

            toDispose.Add(dataObj);
            data       = JavaUtil.ConvertByteArray(dataObj);
            canRematch = matchObj.Call <bool>("canRematch");
            availableAutomatchSlots = matchObj.Call <int>("getAvailableAutoMatchSlots");
            selfParticipantId       = matchObj.Call <string>("getParticipantId", playerId);

            AndroidJavaObject participantIds = matchObj.Call <AndroidJavaObject>("getParticipantIds");

            toDispose.Add(participantIds);
            int participantCount = participantIds.Call <int>("size");

            for (int i = 0; i < participantCount; i++)
            {
                string            thisId   = participantIds.Call <string>("get", i);
                AndroidJavaObject thisPart = matchObj.Call <AndroidJavaObject>("getParticipant", thisId);
                toDispose.Add(thisPart);
                Participant p = JavaUtil.ConvertParticipant(thisPart);
                participants.Add(p);
            }

            pendingParticipantId = matchObj.Call <string>("getPendingParticipantId");
            turnStatus           = JavaUtil.ConvertTurnStatus(matchObj.Call <int>("getTurnStatus"));
            matchStatus          = JavaUtil.ConvertMatchStatus(matchObj.Call <int>("getStatus"));
            variant = matchObj.Call <int>("getVariant");

            // cleanup
            foreach (AndroidJavaObject obj in toDispose)
            {
                if (obj != null)
                {
                    obj.Dispose();
                }
            }

            // participants should be sorted by participant ID
            participants.Sort();

            return(new TurnBasedMatch(matchId, data, canRematch, selfParticipantId,
                                      participants, availableAutomatchSlots,
                                      pendingParticipantId, turnStatus, matchStatus, variant));
        }
        public override byte[] readFully()
        {
            AndroidJavaObject byteArrayObj = mObj.Call <AndroidJavaObject>("readFully");

            return(JavaUtil.ConvertByteArray(byteArrayObj));
        }