private void OnClientConnected(ISocket socket, ISocketConfiguration socketConfiguration) { if (socket == null) { throw new ArgumentNullException("socket"); } NodeGreetingMessageVerifier.SendReceiveAndVerify(socket, socketConfiguration.ConnectTimeout); var messageFrameWriter = MessageFrameWriterFactory.CreateWriterFromSocket(socket); var messageFrameReceiver = new MessageFrameReceiver(socket); var senderReceiver = new SenderReceiver(messageFrameWriter, messageFrameReceiver); socket.Disconnected += () => SocketDisconnected(socket); if (_clientSockets.TryAdd(socket, senderReceiver)) { var task = ReceiveRequestMessage(senderReceiver); ClientConnected(socket, socketConfiguration); } if (socket.IsDisconnected) { // this is to fix the race condition if socket was disconnected meanwhile SocketDisconnected(socket); } }
private async Task ReceiveAsync(MessageFrameReceiver messageFrameReceiver, CancellationToken cancellationToken) { var task = messageFrameReceiver.ReceiveAsync(cancellationToken); var messageFrame = await task; _messageQueue.Add(messageFrame); MessageFrameReceived(messageFrame); var newTask = ReceiveAsync(messageFrameReceiver, cancellationToken); }
private void WriterClientConnected(ISocket socket, ISocketConfiguration socketConfiguration) { var messageFrameReceiver = new MessageFrameReceiver(socket); messageFrameReceiver.Disconnected += () => WriterSocketDisconnected(socket); var task = ReceiveAsync(messageFrameReceiver, _disposedToken); if (_writerClientSockets.TryAdd(socket, messageFrameReceiver)) { ClientConnected(socket, socketConfiguration); } }
public MessageReceiveLoop(IMessageSerialization messageSerialization, ISocket socket, MessageReceivedDelegate messageReceivedDelegate, SocketExceptionDelegate onExceptionDelegate) { if (messageSerialization == null) throw new ArgumentNullException("messageSerialization"); if (socket == null) throw new ArgumentNullException("socket"); if (messageReceivedDelegate == null) throw new ArgumentNullException("messageReceivedDelegate"); _socket = socket; _messageFrameReceiver = new MessageFrameReceiver(socket); _messageSerialization = messageSerialization; _messageReceivedDelegate = messageReceivedDelegate; _socketExceptionDelegate = onExceptionDelegate; }
public void Connect(RedFoxEndpoint endpoint, ISocketConfiguration socketConfiguration) { if (_socket != null) { throw new InvalidOperationException("Subscriber already connected"); } _cts = new CancellationTokenSource(); _socket = SocketFactory.CreateAndConnectAsync(endpoint, NodeType.Requester, socketConfiguration); _socket.Disconnected += SocketDisconnected; NodeGreetingMessageVerifier.SendReceiveAndVerify(_socket, socketConfiguration.ConnectTimeout); if (!_cts.IsCancellationRequested) { _messageFrameWriter = MessageFrameWriterFactory.CreateWriterFromSocket(_socket); _messageFrameReceiver = new MessageFrameReceiver(_socket); } }
public MessageReceiveLoop(IMessageSerialization messageSerialization, ISocket socket, MessageReceivedDelegate messageReceivedDelegate, SocketExceptionDelegate onExceptionDelegate) { if (messageSerialization == null) { throw new ArgumentNullException("messageSerialization"); } if (socket == null) { throw new ArgumentNullException("socket"); } if (messageReceivedDelegate == null) { throw new ArgumentNullException("messageReceivedDelegate"); } _socket = socket; _messageFrameReceiver = new MessageFrameReceiver(socket); _messageSerialization = messageSerialization; _messageReceivedDelegate = messageReceivedDelegate; _socketExceptionDelegate = onExceptionDelegate; }
private void OnClientConnected(ISocket socket, ISocketConfiguration socketConfiguration) { if (socket == null) throw new ArgumentNullException("socket"); NodeGreetingMessageVerifier.SendReceiveAndVerify(socket, socketConfiguration.ConnectTimeout); var messageFrameWriter = MessageFrameWriterFactory.CreateWriterFromSocket(socket); var messageFrameReceiver = new MessageFrameReceiver(socket); var senderReceiver = new SenderReceiver(messageFrameWriter, messageFrameReceiver); socket.Disconnected += () => SocketDisconnected(socket); if (_clientSockets.TryAdd(socket, senderReceiver)) { var task = ReceiveRequestMessage(senderReceiver); ClientConnected(socket, socketConfiguration); } if (socket.IsDisconnected) { // this is to fix the race condition if socket was disconnected meanwhile SocketDisconnected(socket); } }
public SenderReceiver(IMessageFrameWriter sender, MessageFrameReceiver receiver) { Sender = sender; Receiver = receiver; }
public void Connect(RedFoxEndpoint endpoint, ISocketConfiguration socketConfiguration) { if (_socket != null) throw new InvalidOperationException("Subscriber already connected"); _cts = new CancellationTokenSource(); _socket = SocketFactory.CreateAndConnectAsync(endpoint, NodeType.Requester, socketConfiguration); _socket.Disconnected += SocketDisconnected; NodeGreetingMessageVerifier.SendReceiveAndVerify(_socket, socketConfiguration.ConnectTimeout); if (!_cts.IsCancellationRequested) { _messageFrameWriter = MessageFrameWriterFactory.CreateWriterFromSocket(_socket); _messageFrameReceiver = new MessageFrameReceiver(_socket); } }