public async Task ProcessIncommingFrames() { await Task.Yield(); try { await foreach (var frame in _stream.Frames()) { var commandSize = frame.ReadUInt32(0, true); var command = Serializer.Deserialize <BaseCommand>(frame.Slice(4, commandSize)); switch (command.CommandType) { case BaseCommand.Type.Message: _channelManager.Incoming(command.Message, new ReadOnlySequence <byte>(frame.Slice(commandSize + 4).ToArray())); break; case BaseCommand.Type.Ping: _pingPongHandler.GotPing(); break; default: _channelManager.Incoming(command); break; } } } catch { // ignored } }
public async Task ProcessIncommingFrames(CancellationToken cancellationToken) { await Task.Yield(); try { await foreach (var frame in _stream.Frames()) { var commandSize = frame.ReadUInt32(0, true); var command = Serializer.Deserialize <BaseCommand>(frame.Slice(4, commandSize)); switch (command.CommandType) { case BaseCommand.Type.Message: _channelManager.Incoming(command.Message, frame.Slice(commandSize + 4)); break; case BaseCommand.Type.CloseConsumer: _channelManager.Incoming(command.CloseConsumer); break; case BaseCommand.Type.ActiveConsumerChange: _channelManager.Incoming(command.ActiveConsumerChange); break; case BaseCommand.Type.ReachedEndOfTopic: _channelManager.Incoming(command.ReachedEndOfTopic); break; case BaseCommand.Type.CloseProducer: _channelManager.Incoming(command.CloseProducer); break; case BaseCommand.Type.Ping: _pingPongHandler.Incoming(command.Ping, cancellationToken); break; default: _requestResponseHandler.Incoming(command); break; } } } catch { // ignored } }