Пример #1
0
        // virtual to allow mocking
        protected internal virtual bool ProcessResponse(IConnection connection, string response)
        {
            if (connection == null)
            {
                throw new ArgumentNullException("connection");
            }

            if (_initializationHandler == null)
            {
                throw new InvalidOperationException(Resources.Error_ProcessResponseBeforeStart);
            }

            connection.MarkLastMessage();

            if (String.IsNullOrEmpty(response))
            {
                return(false);
            }

            var shouldReconnect = false;

            try
            {
                var result = connection.JsonDeserializeObject <JObject>(response);

                if (!result.HasValues)
                {
                    return(false);
                }

                if (result["I"] != null)
                {
                    connection.OnReceived(result);
                    return(false);
                }

                shouldReconnect = (int?)result["T"] == 1;

                var groupsToken = result["G"];
                if (groupsToken != null)
                {
                    connection.GroupsToken = (string)groupsToken;
                }

                var messages = result["M"] as JArray;
                if (messages != null)
                {
                    connection.MessageId = (string)result["C"];

                    foreach (JToken message in (IEnumerable <JToken>)messages)
                    {
                        connection.OnReceived(message);
                    }

                    if ((int?)result["S"] == 1)
                    {
                        _initializationHandler.InitReceived();
                    }
                }
            }
            catch (Exception ex)
            {
                connection.OnError(ex);
            }

            return(shouldReconnect);
        }
        // virtual to allow mocking
        protected internal virtual bool ProcessResponse(IConnection connection, string response)
        {
            if (connection == null)
            {
                throw new ArgumentNullException("connection");
            }

            if (_initializationHandler == null)
            {
                throw new InvalidOperationException("Resources.Error_ProcessResponseBeforeStart");
            }

            connection.MarkLastMessage();

            if (String.IsNullOrEmpty(response))
            {
                return(false);
            }

            var shouldReconnect = false;

            try
            {
                var result = JSON.Parse(response);

                if (result.IsEmpty)
                {
                    return(false);
                }

                if (!result["I"].IsEmpty)
                {
                    connection.OnReceived(result);
                    return(false);
                }

                shouldReconnect = result["T"].AsInt == 1;

                var groupsToken = result["G"];
                if (groupsToken != null)
                {
                    connection.GroupsToken = groupsToken.AsString;
                }

                var messages = result["M"] as JSONArray;
                if (messages != null)
                {
                    connection.MessageId = result["C"].AsString;

                    foreach (var message in messages)
                    {
                        connection.OnReceived(message);
                    }

                    if (result["S"].AsInt == 1)
                    {
                        _initializationHandler.InitReceived();
                    }
                }
            }
            catch (Exception ex)
            {
                connection.OnError(ex);
            }

            return(shouldReconnect);
        }