예제 #1
0
        public void AddNoMessagesToQueue_GivenNoAutomatedMessages()
        {
            var automatedMessagingSystem = new AutomatedMessagingSystem();

            automatedMessagingSystem.CheckMessages(DateTime.Now);

            Assert.Empty(automatedMessagingSystem.QueuedMessages);
        }
예제 #2
0
        public void AddOneMessagesToQueue_GivenOneReadyAutomatedMessage()
        {
            var automatedMessagingSystem = new AutomatedMessagingSystem();

            automatedMessagingSystem.Publish(new AlwaysReadyMessage());

            automatedMessagingSystem.CheckMessages(DateTime.Now);

            Assert.Single(automatedMessagingSystem.QueuedMessages);
        }
예제 #3
0
        public void AddOneMessagesToQueue_GivenManyMessages_OnlyOneReady()
        {
            var automatedMessagingSystem = new AutomatedMessagingSystem();

            automatedMessagingSystem.Publish(new NeverReadyMessage());
            automatedMessagingSystem.Publish(new AlwaysReadyMessage());
            automatedMessagingSystem.Publish(new NeverReadyMessage());

            automatedMessagingSystem.CheckMessages();

            Assert.Single(automatedMessagingSystem.QueuedMessages);
        }
예제 #4
0
        public void ReturnTrueAndProvideMessage_GivenSingleQueuedMessage()
        {
            var automatedMessagingSystem = new AutomatedMessagingSystem();
            var message = new AlwaysReadyMessage();

            automatedMessagingSystem.Publish(message);
            automatedMessagingSystem.CheckMessages();

            bool result = automatedMessagingSystem.DequeueMessage(out string myMessage);

            Assert.True(result);
            Assert.Equal(message.GetMessageInstance(), myMessage);
        }
예제 #5
0
        public void ReturnOnlyOneMessage_GivenSingleQueuedMessage()
        {
            var automatedMessagingSystem = new AutomatedMessagingSystem();
            var message = new AlwaysReadyMessage();

            automatedMessagingSystem.Publish(message);
            automatedMessagingSystem.CheckMessages();

            automatedMessagingSystem.DequeueMessage(out string myMessage);
            bool result = automatedMessagingSystem.DequeueMessage(out string throwawayMessage);

            Assert.False(result);
            Assert.Equal(message.GetMessageInstance(), myMessage);
            Assert.Null(throwawayMessage);
        }
예제 #6
0
        private void BeginLoop()
        {
            while (true)
            {
                Thread.Sleep(1000);

                _autoMsgSystem.CheckMessages(DateTime.Now);

                while (_autoMsgSystem.DequeueMessage(out string theMessage))
                {
                    var message = $"{DateTime.Now.ToShortTimeString()} - {theMessage}";
                    foreach (var chatClient in _chatClients)
                    {
                        chatClient.SendMessage(message);
                    }
                }
            }
        }
예제 #7
0
        private void BeginLoop()
        {
            _stopRequestSource = new CancellationTokenSource();
            Task.Run(() =>
            {
                while (_stopRequestSource.Token.IsCancellationRequested != true)
                {
                    Thread.Sleep(_refreshInterval);

                    _automatedActionSystem.RunNecessaryActions();

                    _autoMsgSystem.CheckMessages();

                    while (_autoMsgSystem.DequeueMessage(out string message))
                    {
                        foreach (var chatClient in _chatClients)
                        {
                            chatClient.SendMessage(message);
                        }
                    }
                }
            });
        }