public void ParseResponseAsync(string response) { if (string.IsNullOrEmpty(response)) { Log.Info("The response was null/empty"); return; } // open connection or ping response if (response == "40" || response == "3") { return; } response = SocketUtilities.CleanResponse(response); var errorMessage = new ErrorMessageDTO(); var sytemError = new SystemErrorDTO(); switch (string.Empty) { case RouteProvider.CHARACTER_SELECTION_FAILED: errorMessage = SocketUtilities.ParseDataFromResponse <ErrorMessageDTO>(response); Log.Error($"Character selection failed: {errorMessage.Message}"); StopConnection(); break; case RouteProvider.SYSTEM_ERROR: sytemError = SocketUtilities.ParseDataFromResponse <SystemErrorDTO>(response); ParseSystemError(response); Log.Error($"Character selection failed: {errorMessage.Message}"); StopConnection(); break; case RouteProvider.MESSAGE_ERROR: errorMessage = SocketUtilities.ParseDataFromResponse <ErrorMessageDTO>(response); Log.Error($"Socket Error: {errorMessage.ErrorCode} - {errorMessage.Message}"); StopConnection(); break; case RouteProvider.EXCEPTION_ERROR: sytemError = SocketUtilities.ParseDataFromResponse <SystemErrorDTO>(response); Log.Error($"Server exception error: {errorMessage.Message}"); AddToConnectionLog("THE SERVER IS MOST LIKELY DOWN!"); StopConnection(); break; default: break; } }
/// <summary> /// Used to determine the type of response received and to parse the initial connection configuration. /// </summary> /// <param name="response">The response of the websocket</param> /// <returns></returns> private void ParseSocketResponse(string response) { if (string.IsNullOrEmpty(response) || !response.StartsWith("0{\"sid\":")) { return; } response = SocketUtilities.CleanResponse(response); SocketResponse socketResponse = new SocketResponse(); JsonSerializerSettings serializerSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; try { socketResponse = JsonConvert.DeserializeObject <SocketResponse>(response, serializerSettings); } catch (Exception e) { Log.Error(e, $"Could not deserialize the following string in {nameof(ParseSocketResponse)}: {Environment.NewLine} {response}"); } if (!string.IsNullOrEmpty(socketResponse.SessionID)) { _sessionId = socketResponse.SessionID; } // The pingTimeout and pingInterval are always send in the same message. if (socketResponse.PingTimeout > 1000 && socketResponse.PingInterval > 1000) { _pingTimeout = socketResponse.PingTimeout; _pingInterval = socketResponse.PingInterval; } }