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