Example #1
0
        private void OnRequestedSelectCharacter(ResponseHandlerData responseHandler, AckResponseCode responseCode, INetSerializable response)
        {
            if (responseCode == AckResponseCode.Timeout)
            {
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UITextKeys.UI_LABEL_ERROR.ToString()), LanguageManager.GetText(UITextKeys.UI_ERROR_CONNECTION_TIMEOUT.ToString()));
                return;
            }
            // Proceed response
            ResponseSelectCharacterMessage castedResponse = response as ResponseSelectCharacterMessage;

            switch (responseCode)
            {
            case AckResponseCode.Error:
                string errorMessage = string.Empty;
                switch (castedResponse.error)
                {
                case ResponseSelectCharacterMessage.Error.NotLoggedin:
                    errorMessage = LanguageManager.GetText(UITextKeys.UI_ERROR_NOT_LOGGED_IN.ToString());
                    break;

                case ResponseSelectCharacterMessage.Error.AlreadySelectCharacter:
                    errorMessage = LanguageManager.GetText(UITextKeys.UI_ERROR_ALREADY_SELECT_CHARACTER.ToString());
                    break;

                case ResponseSelectCharacterMessage.Error.InvalidCharacterData:
                    errorMessage = LanguageManager.GetText(UITextKeys.UI_ERROR_INVALID_CHARACTER_DATA.ToString());
                    break;

                case ResponseSelectCharacterMessage.Error.MapNotReady:
                    errorMessage = LanguageManager.GetText(UITextKeys.UI_ERROR_MAP_SERVER_NOT_READY.ToString());
                    break;
                }
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UITextKeys.UI_LABEL_ERROR.ToString()), errorMessage);
                break;

            default:
                MMOClientInstance.Singleton.StartMapClient(castedResponse.sceneName, castedResponse.networkAddress, castedResponse.networkPort);
                break;
            }
        }
Example #2
0
 protected virtual void HandleEnterGameResponse(
     ResponseHandlerData responseHandler,
     AckResponseCode responseCode,
     EnterGameResponseMessage response)
 {
     if (responseCode == AckResponseCode.Success)
     {
         ClientConnectionId = response.connectionId;
         if (IsClientConnected)
         {
             HandleServerSceneChange(response.serverSceneName);
         }
     }
     else
     {
         if (LogError)
         {
             Logging.LogError(LogTag, "Enter game request was refused by server, disconnecting...");
         }
         OnClientConnectionRefused();
     }
 }
Example #3
0
 protected virtual UniTaskVoid HandleEnterGameResponse(
     ResponseHandlerData responseHandler,
     AckResponseCode responseCode,
     EnterGameResponseMessage response)
 {
     if (responseCode == AckResponseCode.Success)
     {
         ClientConnectionId = response.connectionId;
         if (!IsServer || !IsClientConnected)
         {
             HandleServerSceneChange(response.serverSceneName);
         }
     }
     else
     {
         if (LogError)
         {
             Logging.LogError(LogTag, "Enter game request was refused by server, disconnecting...");
         }
         StopClient();
     }
     return(default);
Example #4
0
 private void OnAppServerRegistered(AckResponseCode responseCode, BaseAckMessage message)
 {
     if (responseCode == AckResponseCode.Success)
     {
         if (spawningScenes == null || spawningScenes.Count == 0)
         {
             spawningScenes = new List <UnityScene>();
             List <string> sceneNames = GameInstance.Singleton.GetGameScenes();
             foreach (string sceneName in sceneNames)
             {
                 spawningScenes.Add(new UnityScene()
                 {
                     SceneName = sceneName
                 });
             }
         }
         foreach (UnityScene scene in spawningScenes)
         {
             SpawnMap(scene, true);
         }
     }
 }
Example #5
0
        private void OnRequestedSelectCharacter(AckResponseCode responseCode, BaseAckMessage message)
        {
            ResponseSelectCharacterMessage castedMessage = (ResponseSelectCharacterMessage)message;

            switch (responseCode)
            {
            case AckResponseCode.Error:
                string errorMessage = string.Empty;
                switch (castedMessage.error)
                {
                case ResponseSelectCharacterMessage.Error.NotLoggedin:
                    errorMessage = "User not logged in";
                    break;

                case ResponseSelectCharacterMessage.Error.AlreadySelectCharacter:
                    errorMessage = "Already select character";
                    break;

                case ResponseSelectCharacterMessage.Error.InvalidCharacterData:
                    errorMessage = "Invalid character data";
                    break;

                case ResponseSelectCharacterMessage.Error.MapNotReady:
                    errorMessage = "Map server is not ready";
                    break;
                }
                UISceneGlobal.Singleton.ShowMessageDialog("Cannot Select Character", errorMessage);
                break;

            case AckResponseCode.Timeout:
                UISceneGlobal.Singleton.ShowMessageDialog("Cannot Select Character", "Connection timeout");
                break;

            default:
                MMOClientInstance.Singleton.StartMapClient(castedMessage.sceneName, castedMessage.networkAddress, castedMessage.networkPort, castedMessage.connectKey);
                break;
            }
        }
        private void OnRequestedSelectCharacter(AckResponseCode responseCode, BaseAckMessage message)
        {
            ResponseSelectCharacterMessage castedMessage = (ResponseSelectCharacterMessage)message;

            switch (responseCode)
            {
            case AckResponseCode.Error:
                string errorMessage = string.Empty;
                switch (castedMessage.error)
                {
                case ResponseSelectCharacterMessage.Error.NotLoggedin:
                    errorMessage = LanguageManager.GetText(UILocaleKeys.UI_ERROR_NOT_LOGGED_IN.ToString());
                    break;

                case ResponseSelectCharacterMessage.Error.AlreadySelectCharacter:
                    errorMessage = LanguageManager.GetText(UILocaleKeys.UI_ERROR_ALREADY_SELECT_CHARACTER.ToString());
                    break;

                case ResponseSelectCharacterMessage.Error.InvalidCharacterData:
                    errorMessage = LanguageManager.GetText(UILocaleKeys.UI_ERROR_INVALID_CHARACTER_DATA.ToString());
                    break;

                case ResponseSelectCharacterMessage.Error.MapNotReady:
                    errorMessage = LanguageManager.GetText(UILocaleKeys.UI_ERROR_MAP_SERVER_NOT_READY.ToString());
                    break;
                }
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UILocaleKeys.UI_LABEL_ERROR.ToString()), errorMessage);
                break;

            case AckResponseCode.Timeout:
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UILocaleKeys.UI_LABEL_ERROR.ToString()), LanguageManager.GetText(UILocaleKeys.UI_ERROR_CONNECTION_TIMEOUT.ToString()));
                break;

            default:
                MMOClientInstance.Singleton.StartMapClient(castedMessage.sceneName, castedMessage.networkAddress, castedMessage.networkPort, castedMessage.connectKey);
                break;
            }
        }
 public void OnLogin(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseUserLoginMessage response)
 {
     LoggingIn = false;
     if (responseCode.ShowUnhandledResponseMessageDialog(response.message))
     {
         if (onLoginFail != null)
         {
             onLoginFail.Invoke();
         }
         return;
     }
     if (toggleAutoLogin != null && toggleAutoLogin.isOn)
     {
         // Store password
         PlayerPrefs.SetString(keyUsername, Username);
         PlayerPrefs.SetString(keyPassword, Password);
         PlayerPrefs.Save();
     }
     if (onLoginSuccess != null)
     {
         onLoginSuccess.Invoke();
     }
 }
 private void OnRequestSpawnMap(ResponseHandlerData requestHandler, AckResponseCode responseCode, INetSerializable response, string instanceId)
 {
     if (responseCode == AckResponseCode.Error ||
         responseCode == AckResponseCode.Timeout)
     {
         // Remove warping characters who warping to instance map
         HashSet <uint> instanceMapWarpingCharacters;
         if (instanceMapWarpingCharactersByInstanceId.TryGetValue(instanceId, out instanceMapWarpingCharacters))
         {
             BasePlayerCharacterEntity playerCharacterEntity;
             foreach (uint warpingCharacter in instanceMapWarpingCharacters)
             {
                 if (Assets.TryGetSpawnedObject(warpingCharacter, out playerCharacterEntity))
                 {
                     playerCharacterEntity.IsWarping = false;
                     ServerGameMessageHandlers.SendGameMessage(playerCharacterEntity.ConnectionId, UITextKeys.UI_ERROR_SERVICE_NOT_AVAILABLE);
                 }
             }
             instanceMapWarpingCharactersByInstanceId.TryRemove(instanceId, out _);
         }
         instanceMapWarpingLocations.TryRemove(instanceId, out _);
     }
 }
Example #9
0
        protected void OnRequestSpawnMap(AckResponseCode responseCode, BaseAckMessage messageData)
        {
            if (responseCode == AckResponseCode.Timeout)
            {
                if (LogError)
                {
                    Logging.Log(LogTag, "Spawn Map Ack Id: " + messageData.ackId + " Timeout.");
                }
                return;
            }
            ResponseSpawnMapMessage castedMessage = messageData as ResponseSpawnMapMessage;

            if (LogInfo)
            {
                Logging.Log(LogTag, "Spawn Map Ack Id: " + messageData.ackId + "  Status: " + responseCode + " Error: " + castedMessage.error);
            }
            // Forward responses to map server transport handler
            KeyValuePair <TransportHandler, uint> requestSpawnMapHandler;

            if (requestSpawnMapHandlers.TryGetValue(castedMessage.ackId, out requestSpawnMapHandler))
            {
                requestSpawnMapHandler.Key.ReadResponse(requestSpawnMapHandler.Value, castedMessage.responseCode, castedMessage);
            }
        }
Example #10
0
 private void OnUserLogout(AckResponseCode responseCode, BaseAckMessage messageData)
 {
     ClearHistory();
     Next(uiLogin);
 }
        private void OnRequestedCharacters(AckResponseCode responseCode, BaseAckMessage message)
        {
            ResponseCharactersMessage castedMessage = (ResponseCharactersMessage)message;

            CacheCharacterSelectionManager.Clear();
            // Unenabled buttons
            buttonStart.gameObject.SetActive(false);
            buttonDelete.gameObject.SetActive(false);
            // Remove all models
            characterModelContainer.RemoveChildren();
            CharacterModelById.Clear();
            // Remove all cached data
            PlayerCharacterDataById.Clear();

            List <PlayerCharacterData> selectableCharacters = new List <PlayerCharacterData>();

            switch (responseCode)
            {
            case AckResponseCode.Error:
                string errorMessage = string.Empty;
                switch (castedMessage.error)
                {
                case ResponseCharactersMessage.Error.NotLoggedin:
                    errorMessage = LanguageManager.GetText(UILocaleKeys.UI_ERROR_NOT_LOGGED_IN.ToString());
                    break;
                }
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UILocaleKeys.UI_LABEL_ERROR.ToString()), errorMessage);
                break;

            case AckResponseCode.Timeout:
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UILocaleKeys.UI_LABEL_ERROR.ToString()), LanguageManager.GetText(UILocaleKeys.UI_ERROR_CONNECTION_TIMEOUT.ToString()));
                break;

            default:
                selectableCharacters = castedMessage.characters;
                break;
            }

            // Show list of created characters
            for (int i = selectableCharacters.Count - 1; i >= 0; --i)
            {
                PlayerCharacterData selectableCharacter = selectableCharacters[i];
                if (selectableCharacter == null || !GameInstance.PlayerCharacters.ContainsKey(selectableCharacter.DataId))
                {
                    selectableCharacters.RemoveAt(i);
                }
            }
            selectableCharacters.Sort(new PlayerCharacterDataLastUpdateComparer().Desc());
            CacheCharacterList.Generate(selectableCharacters, (index, characterData, ui) =>
            {
                // Cache player character to dictionary, we will use it later
                PlayerCharacterDataById[characterData.Id] = characterData;
                UICharacter uiCharacter = ui.GetComponent <UICharacter>();
                uiCharacter.Data        = characterData;
                // Select trigger when add first entry so deactivate all models is okay beacause first model will active
                BaseCharacterModel characterModel = characterData.InstantiateModel(characterModelContainer);
                if (characterModel != null)
                {
                    CharacterModelById[characterData.Id] = characterModel;
                    characterModel.gameObject.SetActive(false);
                    characterModel.SetEquipWeapons(characterData.EquipWeapons);
                    characterModel.SetEquipItems(characterData.EquipItems);
                    CacheCharacterSelectionManager.Add(uiCharacter);
                }
            });
        }
Example #12
0
 public void Response(long connectionId, NetDataReader reader, AckResponseCode responseCode)
 {
     ResponseHandler.InvokeResponse(new ResponseHandlerData(RequestId, TransportHandler, connectionId, reader), responseCode, ResponseDelegate);
 }
        private void OnRequestValidateAccessToken(ResponseHandlerData responseHandler, AckResponseCode responseCode, INetSerializable response, ResponseDelegate callback)
        {
            if (callback != null)
            {
                callback.Invoke(responseHandler, responseCode, response);
            }

            UserId      = string.Empty;
            AccessToken = string.Empty;
            if (responseCode == AckResponseCode.Success)
            {
                ResponseValidateAccessTokenMessage castedResponse = response as ResponseValidateAccessTokenMessage;
                UserId      = castedResponse.userId;
                AccessToken = castedResponse.accessToken;
            }
        }
        private async UniTaskVoid OnRequestedDeleteCharacter(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseDeleteCharacterMessage response)
        {
            await UniTask.Yield();

            if (responseCode.ShowUnhandledResponseMessageDialog(response.message))
            {
                return;
            }
            // Reload characters
            LoadCharacters();
        }
Example #15
0
 public virtual void Deserialize(NetDataReader reader)
 {
     ackId        = reader.GetUInt();
     responseCode = (AckResponseCode)reader.GetByte();
 }
Example #16
0
 /// <summary>
 /// Response callback for MoveAllItemsFromStorage
 /// </summary>
 public static void ResponseMoveAllItemsFromStorage(ResponseHandlerData requestHandler, AckResponseCode responseCode, ResponseMoveAllItemsFromStorageMessage response)
 {
     ClientGenericActions.ClientReceiveGameMessage(response.message);
     if (onResponseMoveAllItemsFromStorage != null)
     {
         onResponseMoveAllItemsFromStorage.Invoke(requestHandler, responseCode, response);
     }
 }
Example #17
0
        private void OnRequestedCharacters(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseCharactersMessage response)
        {
            // Clear character list
            CacheCharacterSelectionManager.Clear();
            CacheCharacterList.HideAll();
            // Unable buttons
            buttonStart.gameObject.SetActive(false);
            buttonDelete.gameObject.SetActive(false);
            // Remove all models
            characterModelContainer.RemoveChildren();
            CharacterModelById.Clear();
            // Remove all cached data
            PlayerCharacterDataById.Clear();
            // Proceed response
            List <PlayerCharacterData> selectableCharacters = new List <PlayerCharacterData>();

            if (!responseCode.ShowUnhandledResponseMessageDialog(response.message))
            {
                // Success, so set selectable characters by response's data
                selectableCharacters = response.characters;
            }
            // Show list of created characters
            for (int i = selectableCharacters.Count - 1; i >= 0; --i)
            {
                PlayerCharacterData selectableCharacter = selectableCharacters[i];
                if (selectableCharacter == null ||
                    !GameInstance.PlayerCharacterEntities.ContainsKey(selectableCharacter.EntityId) ||
                    !GameInstance.PlayerCharacters.ContainsKey(selectableCharacter.DataId))
                {
                    // If invalid entity id or data id, remove from selectable character list
                    selectableCharacters.RemoveAt(i);
                }
            }

            if (GameInstance.Singleton.maxCharacterSaves > 0 &&
                selectableCharacters.Count >= GameInstance.Singleton.maxCharacterSaves)
            {
                eventOnNotAbleToCreateCharacter.Invoke();
            }
            else
            {
                eventOnAbleToCreateCharacter.Invoke();
            }

            // Clear selected character data, will select first in list if available
            selectedPlayerCharacterData = null;

            // Generate list entry by saved characters
            if (selectableCharacters.Count > 0)
            {
                selectableCharacters.Sort(new PlayerCharacterDataLastUpdateComparer().Desc());
                CacheCharacterList.Generate(selectableCharacters, (index, characterData, ui) =>
                {
                    // Cache player character to dictionary, we will use it later
                    PlayerCharacterDataById[characterData.Id] = characterData;
                    // Setup UIs
                    UICharacter uiCharacter = ui.GetComponent <UICharacter>();
                    uiCharacter.Data        = characterData;
                    // Select trigger when add first entry so deactivate all models is okay beacause first model will active
                    BaseCharacterModel characterModel = characterData.InstantiateModel(characterModelContainer);
                    if (characterModel != null)
                    {
                        CharacterModelById[characterData.Id] = characterModel;
                        characterModel.SetEquipWeapons(characterData.EquipWeapons);
                        characterModel.SetEquipItems(characterData.EquipItems);
                        characterModel.gameObject.SetActive(false);
                        CacheCharacterSelectionManager.Add(uiCharacter);
                    }
                });
            }
            else
            {
                eventOnNoCharacter.Invoke();
            }
        }
Example #18
0
 public void ClientReadResponse <T>(uint ackId, AckResponseCode responseCode, T messageData) where T : BaseAckMessage
 {
     Client.ReadResponse(ackId, responseCode, messageData);
 }
        private async UniTaskVoid OnRequestValidateAccessToken(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseValidateAccessTokenMessage response, ResponseDelegate <ResponseValidateAccessTokenMessage> callback)
        {
            await UniTask.Yield();

            if (callback != null)
            {
                callback.Invoke(responseHandler, responseCode, response);
            }

            GameInstance.UserId    = string.Empty;
            GameInstance.UserToken = string.Empty;
            if (responseCode == AckResponseCode.Success)
            {
                GameInstance.UserId    = response.userId;
                GameInstance.UserToken = response.accessToken;
            }
        }
Example #20
0
 public AsyncResponseData(ResponseHandlerData requestHandler, AckResponseCode responseCode, TResponse response)
 {
     RequestHandler = requestHandler;
     ResponseCode   = responseCode;
     Response       = response;
 }
        private async UniTaskVoid OnRequestSelectCharacter(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseSelectCharacterMessage response, string characterId, ResponseDelegate <ResponseSelectCharacterMessage> callback)
        {
            await UniTask.Yield();

            if (callback != null)
            {
                callback.Invoke(responseHandler, responseCode, response);
            }

            GameInstance.SelectedCharacterId = string.Empty;
            if (responseCode == AckResponseCode.Success)
            {
                GameInstance.SelectedCharacterId = characterId;
            }
        }
        private async UniTaskVoid OnRequestedCreateCharacter(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseCreateCharacterMessage response)
        {
            await UniTask.Yield();

            if (responseCode.ShowUnhandledResponseMessageDialog(response.message))
            {
                return;
            }
            if (eventOnCreateCharacter != null)
            {
                eventOnCreateCharacter.Invoke();
            }
        }
        protected void OnRequestSpawnMap(AckResponseCode responseCode, BaseAckMessage messageData)
        {
            var castedMessage = messageData as ResponseSpawnMapMessage;

            Debug.Log("Spawn Map Ack Id: " + messageData.ackId + "  Status: " + responseCode + " Error: " + castedMessage.error);
        }
        private async UniTaskVoid OnRequestUserLogout(ResponseHandlerData responseHandler, AckResponseCode responseCode, INetSerializable response, ResponseDelegate <INetSerializable> callback)
        {
            await UniTask.Yield();

            if (callback != null)
            {
                callback.Invoke(responseHandler, responseCode, response);
            }

            GameInstance.UserId              = string.Empty;
            GameInstance.UserToken           = string.Empty;
            GameInstance.SelectedCharacterId = string.Empty;
        }
Example #25
0
 public void ServerReadResponse <T>(uint ackId, AckResponseCode responseCode, T messageData) where T : BaseAckMessage
 {
     Server.ReadResponse(ackId, responseCode, messageData);
 }
        private void OnRequestedCharacters(ResponseHandlerData responseHandler, AckResponseCode responseCode, INetSerializable response)
        {
            // Clear character list
            CacheCharacterSelectionManager.Clear();
            CacheCharacterList.HideAll();
            // Unable buttons
            buttonStart.gameObject.SetActive(false);
            buttonDelete.gameObject.SetActive(false);
            // Remove all models
            characterModelContainer.RemoveChildren();
            CharacterModelById.Clear();
            // Remove all cached data
            PlayerCharacterDataById.Clear();
            // Don't make character list if timeout
            if (responseCode == AckResponseCode.Timeout)
            {
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UITextKeys.UI_LABEL_ERROR.ToString()), LanguageManager.GetText(UITextKeys.UI_ERROR_CONNECTION_TIMEOUT.ToString()));
                return;
            }
            // Proceed response
            ResponseCharactersMessage  castedResponse       = response as ResponseCharactersMessage;
            List <PlayerCharacterData> selectableCharacters = new List <PlayerCharacterData>();

            switch (responseCode)
            {
            case AckResponseCode.Error:
                string errorMessage = string.Empty;
                switch (castedResponse.error)
                {
                case ResponseCharactersMessage.Error.NotLoggedin:
                    errorMessage = LanguageManager.GetText(UITextKeys.UI_ERROR_NOT_LOGGED_IN.ToString());
                    break;
                }
                UISceneGlobal.Singleton.ShowMessageDialog(LanguageManager.GetText(UITextKeys.UI_LABEL_ERROR.ToString()), errorMessage);
                break;

            default:
                selectableCharacters = castedResponse.characters;
                break;
            }

            // Show list of created characters
            for (int i = selectableCharacters.Count - 1; i >= 0; --i)
            {
                PlayerCharacterData selectableCharacter = selectableCharacters[i];
                if (selectableCharacter == null ||
                    !GameInstance.PlayerCharacterEntities.ContainsKey(selectableCharacter.EntityId) ||
                    !GameInstance.PlayerCharacters.ContainsKey(selectableCharacter.DataId))
                {
                    // If invalid entity id or data id, remove from selectable character list
                    selectableCharacters.RemoveAt(i);
                }
            }

            if (GameInstance.Singleton.maxCharacterSaves > 0 &&
                selectableCharacters.Count >= GameInstance.Singleton.maxCharacterSaves)
            {
                eventOnNotAbleToCreateCharacter.Invoke();
            }
            else
            {
                eventOnAbleToCreateCharacter.Invoke();
            }

            // Clear selected character data, will select first in list if available
            selectedPlayerCharacterData = null;

            // Generate list entry by saved characters
            if (selectableCharacters.Count > 0)
            {
                selectableCharacters.Sort(new PlayerCharacterDataLastUpdateComparer().Desc());
                CacheCharacterList.Generate(selectableCharacters, (index, characterData, ui) =>
                {
                    // Cache player character to dictionary, we will use it later
                    PlayerCharacterDataById[characterData.Id] = characterData;
                    // Setup UIs
                    UICharacter uiCharacter = ui.GetComponent <UICharacter>();
                    uiCharacter.Data        = characterData;
                    // Select trigger when add first entry so deactivate all models is okay beacause first model will active
                    BaseCharacterModel characterModel = characterData.InstantiateModel(characterModelContainer);
                    if (characterModel != null)
                    {
                        CharacterModelById[characterData.Id] = characterModel;
                        characterModel.SetEquipWeapons(characterData.EquipWeapons);
                        characterModel.SetEquipItems(characterData.EquipItems);
                        characterModel.gameObject.SetActive(false);
                        CacheCharacterSelectionManager.Add(uiCharacter);
                    }
                });
            }
            else
            {
                eventOnNoCharacter.Invoke();
            }
        }
Example #27
0
 internal abstract void InvokeResponse(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseDelegate responseDelegate);
        private async UniTaskVoid OnRequestedSelectCharacter(ResponseHandlerData responseHandler, AckResponseCode responseCode, ResponseSelectCharacterMessage response)
        {
            await UniTask.Yield();

            if (responseCode.ShowUnhandledResponseMessageDialog(response.message))
            {
                return;
            }
            MMOClientInstance.Singleton.StartMapClient(response.sceneName, response.networkAddress, response.networkPort);
        }