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(); }
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(); } }
public abstract void OnParseMessage(object receiver, BasicReader reader, MessageParsingOutput output);