public void onResult(AndroidJavaObject result)
        {
            Logger.d("OnOpenResultProxy.onResult, result=" + result);

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

            int statusCode = JavaUtil.GetStatusCode(result);

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

            AndroidJavaObject openedResult =
                JavaUtil.CallNullSafeObjectMethod(result, "getSnapshot");
            AndroidJavaObject conflictResult =
                JavaUtil.CallNullSafeObjectMethod(result, "getConflictingSnapshot");

            Snapshot opened   = null;
            Snapshot conflict = null;

            if (conflictResult != null)
            {
                conflict = new SnapshotAndroid(mClient, conflictResult);
                opened   = new SnapshotAndroid(mClient, openedResult);
                string conflictId = result.Call <string>("getConflictId");
                if (mListener != null)
                {
                    Logger.d("OnOpenResultProxy.onResult invoke conflict callback.");
                    PlayGamesHelperObject.RunOnGameThread(() => {
                        SnapshotAndroid r = mListener.OnSnapshotConflict(conflict, opened) as SnapshotAndroid;
                        resolveConflict(conflictId, r);
                    });
                }
            }
            else if (openedResult != null)
            {
                opened = new SnapshotAndroid(mClient, openedResult);
                if (mListener != null)
                {
                    Logger.d("OnOpenResultProxy.onResult invoke opened callback.");
                    PlayGamesHelperObject.RunOnGameThread(() => {
                        mListener.OnSnapshotOpened(statusCode, opened);
                    });
                }
            }
            else
            {
                Logger.d("OnOpenResultProxy: both openedResult and conflictResult are null!");
                if (mListener != null)
                {
                    Logger.d("OnOpenResultProxy.onResult invoke fail callback.");
                    PlayGamesHelperObject.RunOnGameThread(() => {
                        mListener.OnSnapshotOpened(statusCode, null);
                    });
                }
            }
        }
Ejemplo n.º 2
0
        public static Participant ConvertParticipant(AndroidJavaObject participant)
        {
            string displayName   = participant.Call <string>("getDisplayName");
            string participantId = participant.Call <string>("getParticipantId");

            Participant.ParticipantStatus status = Participant.ParticipantStatus.Unknown;
            GooglePlayGames.BasicApi.Multiplayer.Player player = null;
            bool connected = participant.Call <bool>("isConnectedToRoom");

            int statusValue = participant.Call <int>("getStatus");

            switch (statusValue)
            {
            case JavaConsts.STATUS_NOT_INVITED_YET:
                status = Participant.ParticipantStatus.NotInvitedYet;
                break;

            case JavaConsts.STATUS_INVITED:
                status = Participant.ParticipantStatus.Invited;
                break;

            case JavaConsts.STATUS_JOINED:
                status = Participant.ParticipantStatus.Joined;
                break;

            case JavaConsts.STATUS_DECLINED:
                status = Participant.ParticipantStatus.Declined;
                break;

            case JavaConsts.STATUS_LEFT:
                status = Participant.ParticipantStatus.Left;
                break;

            case JavaConsts.STATUS_FINISHED:
                status = Participant.ParticipantStatus.Finished;
                break;

            case JavaConsts.STATUS_UNRESPONSIVE:
                status = Participant.ParticipantStatus.Unresponsive;
                break;

            default:
                status = Participant.ParticipantStatus.Unknown;
                break;
            }

            AndroidJavaObject playerObj = JavaUtil.CallNullSafeObjectMethod(participant, "getPlayer");

            if (playerObj != null)
            {
                player = new GooglePlayGames.BasicApi.Multiplayer.Player(playerObj.Call <string>("getDisplayName"),
                                                                         playerObj.Call <string>("getPlayerId"));
                playerObj.Dispose();
                playerObj = null;
            }

            return(new Participant(displayName, participantId, status, player, connected));
        }
Ejemplo n.º 3
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.º 4
0
            public void onResult(AndroidJavaObject result)
            {
                Logger.d("OnAchievementsLoadedResultProxy invoked");
                Logger.d("    result=" + result);
                int statusCode = JavaUtil.GetStatusCode(result);
                AndroidJavaObject androidJavaObject = JavaUtil.CallNullSafeObjectMethod(result, "getAchievements", new object[0]);

                this.mOwner.OnAchievementsLoaded(statusCode, androidJavaObject);
                if (androidJavaObject != null)
                {
                    androidJavaObject.Dispose();
                }
            }
Ejemplo n.º 5
0
        public static Participant ConvertParticipant(AndroidJavaObject participant)
        {
            string displayName     = participant.Call <string>("getDisplayName", new object[0]);
            string participantId   = participant.Call <string>("getParticipantId", new object[0]);
            Player player          = null;
            bool   connectedToRoom = participant.Call <bool>("isConnectedToRoom", new object[0]);

            Participant.ParticipantStatus status;
            switch (participant.Call <int>("getStatus", new object[0]))
            {
            case 0:
                status = Participant.ParticipantStatus.NotInvitedYet;
                break;

            case 1:
                status = Participant.ParticipantStatus.Invited;
                break;

            case 2:
                status = Participant.ParticipantStatus.Joined;
                break;

            case 3:
                status = Participant.ParticipantStatus.Declined;
                break;

            case 4:
                status = Participant.ParticipantStatus.Left;
                break;

            case 5:
                status = Participant.ParticipantStatus.Finished;
                break;

            case 6:
                status = Participant.ParticipantStatus.Unresponsive;
                break;

            default:
                status = Participant.ParticipantStatus.Unknown;
                break;
            }
            AndroidJavaObject androidJavaObject = JavaUtil.CallNullSafeObjectMethod(participant, "getPlayer", new object[0]);

            if (androidJavaObject != null)
            {
                player = new Player(androidJavaObject.Call <string>("getDisplayName", new object[0]), androidJavaObject.Call <string>("getPlayerId", new object[0]));
                androidJavaObject.Dispose();
            }
            return(new Participant(displayName, participantId, status, player, connectedToRoom));
        }
Ejemplo n.º 6
0
            public void onResult(AndroidJavaObject result)
            {
                Logger.d("OnAchievementsLoadedResultProxy invoked");
                Logger.d("    result=" + result);
                int statusCode = JavaUtil.GetStatusCode(result);
                AndroidJavaObject achBuffer = JavaUtil.CallNullSafeObjectMethod(result,
                                                                                "getAchievements");

                mOwner.OnAchievementsLoaded(statusCode, achBuffer);
                if (achBuffer != null)
                {
                    achBuffer.Dispose();
                }
            }
Ejemplo n.º 7
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 = ConvertByteArray(JavaUtil.CallNullSafeObjectMethod(
                                                        conflictResult, "getLocalData"));
                byte[] serverData = 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 = 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.º 8
0
            public void onResult(AndroidJavaObject result)
            {
                Logger.d("ResultProxy got result for method: " + mMethod);
                int            statusCode = JavaUtil.GetStatusCode(result);
                bool           isSuccess  = mSuccessCodes.Contains(statusCode);
                TurnBasedMatch match      = null;

                if (isSuccess)
                {
                    Logger.d("SUCCESS result from method " + mMethod + ": " + statusCode);
                    if (mMatchCallback != null)
                    {
                        Logger.d("Attempting to get match from result of " + mMethod);
                        AndroidJavaObject matchObj = JavaUtil.CallNullSafeObjectMethod(result, "getMatch");
                        if (matchObj != null)
                        {
                            Logger.d("Successfully got match from result of " + mMethod);
                            match = JavaUtil.ConvertMatch(mOwner.mClient.PlayerId, matchObj);
                            matchObj.Dispose();
                        }
                        else
                        {
                            Logger.w("Got a NULL match from result of " + mMethod);
                        }
                    }
                }
                else
                {
                    Logger.w("ERROR result from " + mMethod + ": " + statusCode);
                }

                if (mSuccessCallback != null)
                {
                    Logger.d("Invoking success callback (success=" + isSuccess + ") for " +
                             "result of method " + mMethod);
                    PlayGamesHelperObject.RunOnGameThread(() => {
                        mSuccessCallback.Invoke(isSuccess);
                    });
                }
                if (mMatchCallback != null)
                {
                    Logger.d("Invoking match callback for result of method " + mMethod + ": " +
                             "(success=" + isSuccess + ", match=" +
                             (match == null ? "(null)" : match.ToString()));
                    PlayGamesHelperObject.RunOnGameThread(() => {
                        mMatchCallback.Invoke(isSuccess, match);
                    });
                }
            }
Ejemplo n.º 9
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));
        }
Ejemplo n.º 10
0
        internal void ProcessBuffer(AndroidJavaObject questBuffer)
        {
            int i, count;

            Logger.d("QuestBank: processing quest buffer given as Java object.");

            if (questBuffer == null)
            {
                Logger.w("QuestBank: given buffer was null. Ignoring.");
                return;
            }

            count = questBuffer.Call <int>("getCount");
            Logger.d("QuestBank: buffer contains " + count + " quests.");

            for (i = 0; i < count; ++i)
            {
                Logger.d("QuestBank: processing quest #" + i);
                Quest             quest    = new Quest();
                AndroidJavaObject questObj = questBuffer.Call <AndroidJavaObject>("get", i);

                if (questObj == null)
                {
                    Logger.w("Quest #" + i + " was null. Ignoring.");
                    continue;
                }

                quest.Id          = questObj.Call <string>("getQuestId");
                quest.Name        = questObj.Call <string>("getName");
                quest.Description = questObj.Call <string>("getDescription");

                quest.StartTimestamp    = questObj.Call <long>("getStartTimestamp");
                quest.AcceptedTimestamp = questObj.Call <long>("getAcceptedTimestamp");
                quest.EndTimestamp      = questObj.Call <long>("getEndTimestamp");

                quest.State = questObj.Call <int>("getState");

                AndroidJavaObject mileObj = JavaUtil.CallNullSafeObjectMethod(questObj, "getCurrentMilestone");

                if (mileObj != null)
                {
                    Milestone milestone = new Milestone();

                    milestone.Id      = mileObj.Call <string>("getMilestoneId");
                    milestone.EventId = mileObj.Call <string>("getEventId");

                    milestone.CurrentProgress      = mileObj.Call <long>("getCurrentProgress");
                    milestone.TargetProgress       = mileObj.Call <long>("getTargetProgress");
                    milestone.CompletionRewardData = mileObj.Call <byte[]>("getCompletionRewardData");

                    milestone.State = mileObj.Call <int>("getState");

                    quest.Milestone = milestone;
                }

                Logger.d("QuestBank: processed: " + quest.ToString());

                if (quest.Milestone != null)
                {
                    Logger.d("QuestBank: milestone: " + quest.Milestone.ToString());
                }

                if (quest.Id != null && quest.Id.Length > 0)
                {
                    mQuests[quest.Id] = quest;
                }
                else
                {
                    Logger.w("Quest w/ missing ID received. Ignoring.");
                }
            }

            Logger.d("QuestBank: bank now contains " + mQuests.Count + " entries.");
        }
Ejemplo n.º 11
0
            public void onResult(AndroidJavaObject result)
            {
                Logger.d("ResultProxy got result for method: " + this.mMethod);
                int            statusCode = JavaUtil.GetStatusCode(result);
                bool           isSuccess  = this.mSuccessCodes.Contains(statusCode);
                TurnBasedMatch match      = null;

                if (isSuccess)
                {
                    Logger.d(string.Concat(new object[]
                    {
                        "SUCCESS result from method ",
                        this.mMethod,
                        ": ",
                        statusCode
                    }));
                    if (this.mMatchCallback != null)
                    {
                        Logger.d("Attempting to get match from result of " + this.mMethod);
                        AndroidJavaObject androidJavaObject = JavaUtil.CallNullSafeObjectMethod(result, "getMatch", new object[0]);
                        if (androidJavaObject != null)
                        {
                            Logger.d("Successfully got match from result of " + this.mMethod);
                            match = JavaUtil.ConvertMatch(this.mOwner.mClient.PlayerId, androidJavaObject);
                            androidJavaObject.Dispose();
                        }
                        else
                        {
                            Logger.w("Got a NULL match from result of " + this.mMethod);
                        }
                    }
                }
                else
                {
                    Logger.w(string.Concat(new object[]
                    {
                        "ERROR result from ",
                        this.mMethod,
                        ": ",
                        statusCode
                    }));
                }
                if (this.mSuccessCallback != null)
                {
                    Logger.d(string.Concat(new object[]
                    {
                        "Invoking success callback (success=",
                        isSuccess,
                        ") for result of method ",
                        this.mMethod
                    }));
                    PlayGamesHelperObject.RunOnGameThread(delegate
                    {
                        this.mSuccessCallback(isSuccess);
                    });
                }
                if (this.mMatchCallback != null)
                {
                    Logger.d(string.Concat(new object[]
                    {
                        "Invoking match callback for result of method ",
                        this.mMethod,
                        ": (success=",
                        isSuccess,
                        ", match=",
                        (match != null) ? match.ToString() : "(null)"
                    }));
                    PlayGamesHelperObject.RunOnGameThread(delegate
                    {
                        this.mMatchCallback(isSuccess, match);
                    });
                }
            }