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 ReceiveAsync(MessageFrameReceiver messageFrameReceiver, CancellationToken cancellationToken)
        {
            var task         = messageFrameReceiver.ReceiveAsync(cancellationToken);
            var messageFrame = await task;

            _messageQueue.Add(messageFrame);
            MessageFrameReceived(messageFrame);

            var newTask = ReceiveAsync(messageFrameReceiver, cancellationToken);
        }
Example #3
0
        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;
        }
Example #5
0
        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);
            }
        }
Example #6
0
        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;
        }
Example #7
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 #8
0
 public SenderReceiver(IMessageFrameWriter sender, MessageFrameReceiver receiver)
 {
     Sender = sender;
     Receiver = receiver;
 }
Example #9
0
 public SenderReceiver(IMessageFrameWriter sender, MessageFrameReceiver receiver)
 {
     Sender   = sender;
     Receiver = receiver;
 }
Example #10
0
        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);
            }
        }
Example #11
0
        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);
        }
Example #12
0
        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);
            }
        }