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(); } }
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); }