コード例 #1
0
        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
            }
        }
コード例 #2
0
        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
            }
        }