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; } }
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(); } }
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);
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); } } }
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 _); } }
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); } }
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); } }); }
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(); }
public virtual void Deserialize(NetDataReader reader) { ackId = reader.GetUInt(); responseCode = (AckResponseCode)reader.GetByte(); }
/// <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); } }
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(); } }
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; } }
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; }
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(); } }
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); }