Ejemplo n.º 1
0
        internal static void ProcessParsing(object receiver, BasicReader reader)
        {
            var output = new MessageParsingOutput();
            var caller = GetCaller(receiver);

            _current.OnParseMessage(receiver, reader, output);

            if (caller != null)
            {
                foreach (var message in output.Messages)
                {
                    if (_current.PooledExecution)
                    {
                        _current.AsyncQueue.Enqueue(() => caller.CallReferences(message, receiver));
                    }
                    else
                    {
                        caller.CallReferences(message, receiver);
                    }
                }
            }

            output
            .SetAsReaded()
            .Dispose();
        }
Ejemplo n.º 2
0
        public override void OnParseMessage(object receiver, BasicReader reader, MessageParsingOutput output)
        {
            reader.SetPosition(0);

            while (reader.UnreadedLength > 0)
            {
                var msgId   = reader.GetUShort();
                var msgSize = reader.GetLong();

                if (reader.UnreadedLength < msgSize)
                {
                    break;
                }

                try
                {
                    var message = CreateMessage(msgId);
                    if (message == null)
                    {
                        throw new UnknownMessageException(msgId);
                    }

                    message.Deserialize(reader);
                    output.AddOutput(message);
                }
                catch (Exception ex)
                {
                    throw new DefaultProtocolFailedParsingMessageException(ex.Message);
                }

                reader.RemoveReadedBytes();
            }
        }
Ejemplo n.º 3
0
 public abstract void OnParseMessage(object receiver, BasicReader reader, MessageParsingOutput output);