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;
            }
        }
예제 #2
0
        /// <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;
            }
        }