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 ReceiveRequestMessage(SenderReceiver senderReceiver) { if (senderReceiver.Receiver == null) { throw new ArgumentException("senderReceiver.Receiver must not be null"); } if (senderReceiver.Sender == null) { throw new ArgumentException("senderReceiver.Writer must not be null"); } var messageFrame = await senderReceiver.Receiver.ReceiveAsync(_disposeCancellationToken).ConfigureAwait(false); ReceiveRequestMessage(senderReceiver).ConfigureAwait(false); var requestMessage = _messageSerialization.Deserialize(messageFrame.MessageTypeId, messageFrame.RawMessage); var worker = _responderWorkerFactory.GetWorkerFor(requestMessage); _scheduler.AddWorker(worker, requestMessage, senderReceiver); }
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 ReceiveRequestMessage(SenderReceiver senderReceiver) { if (senderReceiver.Receiver == null) throw new ArgumentException("senderReceiver.Receiver must not be null"); if (senderReceiver.Sender == null) throw new ArgumentException("senderReceiver.Writer must not be null"); var messageFrame = await senderReceiver.Receiver.ReceiveAsync(_disposeCancellationToken).ConfigureAwait(false); ReceiveRequestMessage(senderReceiver).ConfigureAwait(false); var requestMessage = _messageSerialization.Deserialize(messageFrame.MessageTypeId, messageFrame.RawMessage); var worker = _responderWorkerFactory.GetWorkerFor(requestMessage); _scheduler.AddWorker(worker, requestMessage, senderReceiver); }