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); }); } } }
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)); }
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)); }
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(); } }
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)); }
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(); } }
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!"); } }
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); }); } }
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)); }
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."); }
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); }); } }