Beispiel #1
0
        private void HandleReceivedData(RedisChannel channel, RedisValue value)
        {
            var envelopeJson = (string)value;

            _traceWriter.TraceIfEnabledAsync(envelopeJson, DataOperation.Receive).Wait();

            var envelope = _envelopeSerializer.Deserialize(envelopeJson);
            var session  = envelope as Session;

            if (session == null ||
                session.State != SessionState.New)
            {
                _traceWriter.TraceAsync("RedisTransportListener: An unexpected envelope was received", DataOperation.Error).Wait();
            }
            else
            {
                var transport = new RedisTransport(
                    _connectionMultiplexer,
                    _envelopeSerializer,
                    _traceWriter,
                    _channelNamespace,
                    RedisTransport.ClientChannelPrefix,
                    RedisTransport.ServerChannelPrefix);

                _transportBufferBlock.SendAsync(transport).Wait();
                transport.ReceivedEnvelopesBufferBlock.SendAsync(envelope).Wait();
            }
        }
Beispiel #2
0
        public override async Task SendAsync(Envelope envelope, CancellationToken cancellationToken)
        {
            var session = envelope as Session;

            if (session != null &&
                session.State <= SessionState.Established)
            {
                await UpdateReceiveChannelNameAsync(session, cancellationToken);
            }

            var envelopeJson = _envelopeSerializer.Serialize(envelope);

            await _traceWriter.TraceIfEnabledAsync(envelopeJson, DataOperation.Send);

            // Send to the channel or to the server prefix
            await _connectionMultiplexer
            .GetSubscriber()
            .PublishAsync(_sendChannelName ?? GetListenerChannelName(_channelNamespace, ServerChannelPrefix), envelopeJson)
            .ConfigureAwait(false);
        }