コード例 #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 messageQueue       = new MessageQueueBatch(socketConfiguration.SendBufferSize);
            var messageReceiveLoop = new MessageReceiveLoop(_messageSerialization, socket, OnMessageReceived, MessageReceiveLoopOnException);

            if (_broadcastSockets.TryAdd(socket, new MessageQueueReceiveLoop(messageQueue, messageReceiveLoop)))
            {
                _messageQueueBroadcaster.Register(messageQueue, messageFrameWriter);
                ClientConnected(socket, socketConfiguration);
                messageReceiveLoop.Start();
            }

            if (socket.IsDisconnected)
            {
                // this is to fix the race condition if socket was disconnected meanwhile
                SocketDisconnected(socket);
            }
        }
コード例 #2
0
        public void Register(MessageQueueBatch messageQueue, IMessageFrameWriter messageFrameWriter)
        {
            if (messageQueue == null) throw new ArgumentNullException("messageQueue");
            if (messageFrameWriter == null) throw new ArgumentNullException("messageFrameWriter");

            var messageQueuePayload = new MessageQueuePayload(messageFrameWriter);
            messageQueue.MessageFramesAdded += MessageQueueOnMessageFramesAdded;
            _messageQueues[messageQueue] = messageQueuePayload;
            StartAsyncProcessingIfNotStartedYet();
        }
コード例 #3
0
 private static async Task LoopMessageQueueAsync(MessageQueueBatch messageQueue, MessageQueuePayload messageQueuePayload, CancellationToken cancellationToken)
 {
     try
     {
         await messageQueue.SendMultipleFromQueueAsync(messageQueuePayload.Writer, cancellationToken);
     }
     finally
     {
         messageQueuePayload.Busy.Set(false);
     }
 }
コード例 #4
0
        public void Register(MessageQueueBatch messageQueue, IMessageFrameWriter messageFrameWriter)
        {
            if (messageQueue == null)
            {
                throw new ArgumentNullException("messageQueue");
            }
            if (messageFrameWriter == null)
            {
                throw new ArgumentNullException("messageFrameWriter");
            }

            var messageQueuePayload = new MessageQueuePayload(messageFrameWriter);

            messageQueue.MessageFramesAdded += MessageQueueOnMessageFramesAdded;
            _messageQueues[messageQueue]     = messageQueuePayload;
            StartAsyncProcessingIfNotStartedYet();
        }
コード例 #5
0
        public bool Unregister(MessageQueueBatch messageQueue)
        {
            if (messageQueue == null) throw new ArgumentNullException("messageQueue");

            MessageQueuePayload messageQueuePayload;
            var removed = _messageQueues.TryRemove(messageQueue, out messageQueuePayload);
            if (removed)
            {
                messageQueuePayload.Cancelled.Set(true);
                messageQueue.MessageFramesAdded -= MessageQueueOnMessageFramesAdded;
            }

            if (_messageQueues.IsEmpty)
            {
                StopProcessing();
            }

            return removed;
        }
コード例 #6
0
        public bool Unregister(MessageQueueBatch messageQueue)
        {
            if (messageQueue == null)
            {
                throw new ArgumentNullException("messageQueue");
            }

            MessageQueuePayload messageQueuePayload;
            var removed = _messageQueues.TryRemove(messageQueue, out messageQueuePayload);

            if (removed)
            {
                messageQueuePayload.Cancelled.Set(true);
                messageQueue.MessageFramesAdded -= MessageQueueOnMessageFramesAdded;
            }

            if (_messageQueues.IsEmpty)
            {
                StopProcessing();
            }

            return(removed);
        }
コード例 #7
0
ファイル: Publisher.cs プロジェクト: tleviathan/redfoxmq
        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 messageQueue = new MessageQueueBatch(socketConfiguration.SendBufferSize);
            var messageReceiveLoop = new MessageReceiveLoop(_messageSerialization, socket, OnMessageReceived, MessageReceiveLoopOnException);

            if (_broadcastSockets.TryAdd(socket, new MessageQueueReceiveLoop(messageQueue, messageReceiveLoop)))
            {
                _messageQueueBroadcaster.Register(messageQueue, messageFrameWriter);
                ClientConnected(socket, socketConfiguration);
                messageReceiveLoop.Start();
            }

            if (socket.IsDisconnected)
            {
                // this is to fix the race condition if socket was disconnected meanwhile
                SocketDisconnected(socket);
            }
        }
コード例 #8
0
 private static async Task LoopMessageQueueAsync(MessageQueueBatch messageQueue, MessageQueuePayload messageQueuePayload, CancellationToken cancellationToken)
 {
     try
     {
         await messageQueue.SendMultipleFromQueueAsync(messageQueuePayload.Writer, cancellationToken);
     }
     finally
     {
         messageQueuePayload.Busy.Set(false);
     }
 }
コード例 #9
0
ファイル: Publisher.cs プロジェクト: tleviathan/redfoxmq
 public MessageQueueReceiveLoop(MessageQueueBatch messageQueue, MessageReceiveLoop messageReceiveLoop)
 {
     MessageQueue = messageQueue;
     MessageReceiveLoop = messageReceiveLoop;
 }
コード例 #10
0
 public MessageQueueReceiveLoop(MessageQueueBatch messageQueue, MessageReceiveLoop messageReceiveLoop)
 {
     MessageQueue       = messageQueue;
     MessageReceiveLoop = messageReceiveLoop;
 }