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