Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }