public void CreateWithInvitationScreen(uint minOpponents, uint maxOppponents, uint variant, RealTimeMultiplayerListener listener)
 {
     lock (mSessionLock)
     {
         RoomSession newRoom = new RoomSession(mRealtimeManager, listener);
         if (mCurrentSession.IsActive())
         {
             Logger.e("Received attempt to create a new room without cleaning up the old one.");
             newRoom.LeaveRoom();
         }
         else
         {
             mCurrentSession           = newRoom;
             mCurrentSession.ShowingUI = true;
             RealtimeRoomConfig config;
             GooglePlayGames.Native.PInvoke.RealTimeEventListenerHelper helper;
             mRealtimeManager.ShowPlayerSelectUI(minOpponents, maxOppponents, true, delegate(PlayerSelectUIResponse response)
             {
                 mCurrentSession.ShowingUI = false;
                 if (response.Status() != CommonErrorStatus.UIStatus.VALID)
                 {
                     Logger.d("User did not complete invitation screen.");
                     newRoom.LeaveRoom();
                 }
                 else
                 {
                     mCurrentSession.MinPlayersToStart = (uint)((int)response.MinimumAutomatchingPlayers() + response.Count() + 1);
                     using (RealtimeRoomConfigBuilder realtimeRoomConfigBuilder = RealtimeRoomConfigBuilder.Create())
                     {
                         realtimeRoomConfigBuilder.SetVariant(variant);
                         realtimeRoomConfigBuilder.PopulateFromUIResponse(response);
                         config = realtimeRoomConfigBuilder.Build();
                         try
                         {
                             helper = HelperForSession(newRoom);
                             try
                             {
                                 newRoom.StartRoomCreation(mNativeClient.GetUserId(), delegate
                                 {
                                     mRealtimeManager.CreateRoom(config, helper, newRoom.HandleRoomResponse);
                                 });
                             }
                             finally
                             {
                                 if (helper != null)
                                 {
                                     ((IDisposable)helper).Dispose();
                                 }
                             }
                         }
                         finally
                         {
                             if (config != null)
                             {
                                 ((IDisposable)config).Dispose();
                             }
                         }
                     }
                 }
             });
         }
     }
 }