Example #1
0
        public void handle_envelope_sent_then_message_successful_tracking_for_the_same_message_to_multiple_nodes()
        {
            MessageHistory.StartListening();

            var envelope1 = new EnvelopeToken();
            var node1     = new StubChannelNode();
            var node2     = new StubChannelNode();

            var messageWatcher = new MessageWatcher();

            messageWatcher.Handle(new EnvelopeSent(envelope1, node1));
            messageWatcher.Handle(new EnvelopeSent(envelope1, node2));

            MessageHistory.Outstanding().Count().ShouldEqual(2);

            envelope1.Destination = node1.Uri;
            messageWatcher.Handle(new MessageSuccessful
            {
                Envelope = envelope1
            });

            MessageHistory.Outstanding().Count().ShouldEqual(1);

            envelope1.Destination = node2.Uri;
            messageWatcher.Handle(new MessageSuccessful
            {
                Envelope = envelope1
            });

            MessageHistory.Outstanding().Any().ShouldBeFalse();
        }
        public void handle_chain_finished()
        {
            MessageHistory.StartListening();

            var @event = new ChainExecutionStarted
            {
                ChainId = Guid.NewGuid(),
                Envelope = new EnvelopeToken()
            };

            var messageWatcher = new MessageWatcher();
            messageWatcher.Handle(@event);

            var finished = new ChainExecutionFinished
            {
                ChainId = @event.ChainId,
                Envelope = @event.Envelope
            };

            messageWatcher.Handle(finished);

            var received = MessageHistory.Received().Single();
            received.Id.ShouldEqual(@event.Envelope.CorrelationId);
            received.Description.ShouldEqual(finished.ToString());
            received.Type.ShouldEqual(MessageWatcher.MessageTrackType);

            MessageHistory.Outstanding().Any().ShouldBeFalse();
        }
Example #3
0
        public MessageListViewModel(
            MessageRepository messageRepository,
            [NotNull] MessageWatcher messageWatcher,
            MimeMessageLoader mimeMessageLoader,
            IPublishEvent publishEvent,
            ILogger logger)
        {
            if (messageRepository == null)
            {
                throw new ArgumentNullException(nameof(messageRepository));
            }
            if (messageWatcher == null)
            {
                throw new ArgumentNullException(nameof(messageWatcher));
            }
            if (mimeMessageLoader == null)
            {
                throw new ArgumentNullException(nameof(mimeMessageLoader));
            }
            if (publishEvent == null)
            {
                throw new ArgumentNullException(nameof(publishEvent));
            }

            _messageRepository = messageRepository;
            _messageWatcher    = messageWatcher;
            _mimeMessageLoader = mimeMessageLoader;
            _publishEvent      = publishEvent;
            _logger            = logger;

            SetupMessages();
            RefreshMessageList();
        }
        public void handle_envelope_sent_then_message_failed_for_multiple_messages_to_the_same_node()
        {
            MessageHistory.StartListening();

            var envelope1 = new EnvelopeToken();
            var envelope2 = new EnvelopeToken();
            var node1 = new StubChannelNode();

            var messageWatcher = new MessageWatcher();

            messageWatcher.Handle(new EnvelopeSent(envelope1, node1));
            messageWatcher.Handle(new EnvelopeSent(envelope2, node1));

            MessageHistory.Outstanding().Count().ShouldEqual(2);

            envelope1.Destination = node1.Uri;
            messageWatcher.Handle(new MessageFailed
            {
                Envelope = envelope1
            });

            MessageHistory.Outstanding().Count().ShouldEqual(1);

            envelope2.Destination = node1.Uri;
            messageWatcher.Handle(new MessageFailed
            {
                Envelope = envelope2
            });

            MessageHistory.Outstanding().Any().ShouldBeFalse();
        }
Example #5
0
        public async Task UpdateExpenseCategory_PostsNotification()
        {
            //Arrange
            var messenger = new WeakReferenceMessenger();
            var watcher   = new MessageWatcher <DatabaseEvent <ExpenseCategory> >();

            messenger.Register(watcher);
            AutoMocker mocker = new();

            using var factory = mocker.WithDbScope(messenger);

            var expenseCategory = new ExpenseCategory
            {
                Account = new Account()
            };

            using var setupContext = factory.Create();
            setupContext.ExpenseCategories.Add(expenseCategory);
            await setupContext.SaveChangesAsync();

            //Act
            using var actContext = factory.Create();
            var category = await actContext.ExpenseCategories.FindAsync(expenseCategory.ID);

            category.CategoryName += "-Edited";
            await actContext.SaveChangesAsync();

            //Assert
            DatabaseEvent <ExpenseCategory>?message = watcher.Messages.Last();

            Assert.AreEqual(expenseCategory.ID, message.Item.ID);
            Assert.AreEqual(EventType.Updated, message.Type);
        }
 public PathBrowserCloseWatcher(object owner, Guid dialogHandleId, PathChoosenHandlerDlgt pathChoosenHandler, DialogCancelledHandlerDlgt cancelledHandler)
 {
     _watcher = new MessageWatcher(owner, PathBrowserMessaging.CHANNEL, message =>
     {
         if (message.ChannelName == PathBrowserMessaging.CHANNEL)
         {
             PathBrowserMessaging.MessageType messageType = (PathBrowserMessaging.MessageType)message.MessageType;
             if (messageType == PathBrowserMessaging.MessageType.PathChoosen)
             {
                 Guid closedDialogHandle  = (Guid)message.MessageData[PathBrowserMessaging.DIALOG_HANDLE];
                 ResourcePath choosenPath = (ResourcePath)message.MessageData[PathBrowserMessaging.CHOOSEN_PATH];
                 if (closedDialogHandle == dialogHandleId)
                 {
                     if (pathChoosenHandler != null)
                     {
                         pathChoosenHandler(choosenPath);
                     }
                     return(true);
                 }
             }
             else if (messageType == PathBrowserMessaging.MessageType.DialogCancelled)
             {
                 if (cancelledHandler != null)
                 {
                     cancelledHandler();
                 }
                 return(true);
             }
         }
         return(false);
     }, true);
     _watcher.Start();
 }
Example #7
0
        public MessageListViewModel(
            IUiCommandHub uiCommandHub,
            MessageRepository messageRepository,
            [NotNull] MessageWatcher messageWatcher,
            MimeMessageLoader mimeMessageLoader,
            ILogger logger)
        {
            if (messageRepository == null)
            {
                throw new ArgumentNullException(nameof(messageRepository));
            }
            if (messageWatcher == null)
            {
                throw new ArgumentNullException(nameof(messageWatcher));
            }
            if (mimeMessageLoader == null)
            {
                throw new ArgumentNullException(nameof(mimeMessageLoader));
            }

            this._uiCommandHub      = uiCommandHub;
            this._messageRepository = messageRepository;
            this._messageWatcher    = messageWatcher;
            this._mimeMessageLoader = mimeMessageLoader;
            this._logger            = logger;

            this.SetupMessages();
            this.RefreshMessageList();
        }
        public MessageListViewModel(
            MessageRepository messageRepository,
            [NotNull] MessageWatcher messageWatcher,
            MimeMessageLoader mimeMessageLoader,
            IMessageBus messageBus,
            ILogger logger)
        {
            if (messageRepository == null)
            {
                throw new ArgumentNullException(nameof(messageRepository));
            }
            if (messageWatcher == null)
            {
                throw new ArgumentNullException(nameof(messageWatcher));
            }
            if (mimeMessageLoader == null)
            {
                throw new ArgumentNullException(nameof(mimeMessageLoader));
            }
            if (messageBus == null)
            {
                throw new ArgumentNullException(nameof(messageBus));
            }

            _messageRepository = messageRepository;
            _messageWatcher    = messageWatcher;
            _mimeMessageLoader = mimeMessageLoader;
            this._messageBus   = messageBus;
            _logger            = logger;

            SetupMessages();
            RefreshMessageList();
        }
Example #9
0
        public async Task DeleteAccount_PostsNotification()
        {
            //Arrange
            var mocker  = new AutoMocker().WithMessenger();
            var watcher = new MessageWatcher <DatabaseEvent <Account> >();

            mocker.Get <IMessenger>().Register(watcher);
            using var factory = mocker.WithDbScope();

            var account1 = new Account();

            using var setupContext = factory.Create();
            setupContext.Accounts.Add(account1);
            await setupContext.SaveChangesAsync();

            //Act
            using var actContext = factory.Create();
            var account = await actContext.Accounts.FindAsync(account1.ID);

            actContext.Accounts.Remove(account);
            await actContext.SaveChangesAsync();

            //Assert
            DatabaseEvent <Account>?message = watcher.Messages.Last();

            Assert.AreEqual(account1.ID, message.Item.ID);
            Assert.AreEqual(EventType.Deleted, message.Type);
        }
Example #10
0
 public DialogCloseWatcher(object owner, Guid dialogHandleId, CloseHandlerDlgt handler)
 {
     _watcher = new MessageWatcher(owner, DialogManagerMessaging.CHANNEL, message =>
     {
         if (message.ChannelName == DialogManagerMessaging.CHANNEL)
         {
             DialogManagerMessaging.MessageType messageType = (DialogManagerMessaging.MessageType)message.MessageType;
             if (messageType == DialogManagerMessaging.MessageType.DialogClosed)
             {
                 Guid closedDialogHandle   = (Guid)message.MessageData[DialogManagerMessaging.DIALOG_HANDLE];
                 DialogResult dialogResult = (DialogResult)message.MessageData[DialogManagerMessaging.DIALOG_RESULT];
                 if (closedDialogHandle == dialogHandleId)
                 {
                     if (handler != null)
                     {
                         handler(dialogResult);
                     }
                     return(true);
                 }
             }
         }
         return(false);
     }, true);
     _watcher.Start();
 }
Example #11
0
        public void handle_chain_finished()
        {
            MessageHistory.StartListening();

            var @event = new ChainExecutionStarted
            {
                ChainId  = Guid.NewGuid(),
                Envelope = new EnvelopeToken()
            };

            var messageWatcher = new MessageWatcher();

            messageWatcher.Handle(@event);

            var finished = new ChainExecutionFinished
            {
                ChainId  = @event.ChainId,
                Envelope = @event.Envelope
            };

            messageWatcher.Handle(finished);

            var received = MessageHistory.Received().Single();

            received.Id.ShouldEqual(@event.Envelope.CorrelationId);
            received.Description.ShouldEqual(finished.ToString());
            received.Type.ShouldEqual(MessageWatcher.MessageTrackType);

            MessageHistory.Outstanding().Any().ShouldBeFalse();
        }
        public MessageListViewModel(
            MessageRepository messageRepository,
            [NotNull] MessageWatcher messageWatcher,
            MimeMessageLoader mimeMessageLoader,
            IPublishEvent publishEvent,
            ILogger logger)
        {
            if (messageRepository == null)
                throw new ArgumentNullException(nameof(messageRepository));
            if (messageWatcher == null)
                throw new ArgumentNullException(nameof(messageWatcher));
            if (mimeMessageLoader == null)
                throw new ArgumentNullException(nameof(mimeMessageLoader));
            if (publishEvent == null)
                throw new ArgumentNullException(nameof(publishEvent));

            _messageRepository = messageRepository;
            _messageWatcher = messageWatcher;
            _mimeMessageLoader = mimeMessageLoader;
            _publishEvent = publishEvent;
            _logger = logger;

            SetupMessages();
            RefreshMessageList();
        }
Example #13
0
        public async Task Snipe(IUser user, int lastIndex = 1)
        {
            List <MessageData> msgList = MessageWatcher.MessageList.FindAll(m => m.Message.Author == user);

            if (!msgList.Any())
            {
                await Context.Channel.SendMessageAsync($"<@{Context.User.Id}> There's nothing to snipe!");

                return;
            }

            MessageData msg = msgList[msgList.Count - lastIndex];


            EmbedBuilder eb = new EmbedBuilder()
                              .WithColor(new Color(0x90, 0x10, 0x10))
                              .WithAuthor(msg.Message.Author)
                              .WithDescription(msg.Message.Content)
                              .WithTimestamp(msg.Time);

            Embed embed = eb.Build();

            try
            {
                await Context.Channel.SendMessageAsync(
                    $"<@{Context.User.Id}> Sniped! ({(msg.IsEdit ? "Edited" : "Deleted")})", embed : embed);
            }
            catch
            {
                Logging.Log($"(!snipe index) I'm muted ;_;");
                MessageWatcher.SaveMessageList();
            }
        }
Example #14
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="UserID"></param>
 /// <param name="url"></param>
 public SynchronousController(string userID, string url)
 {
     TextDoc       = new TextDoc();
     this.Url      = url;
     MessageQueues = new MessageHolder();
     Watcher       = new MessageWatcher(MessageQueues, url);
     UserID        = userID;
 }
Example #15
0
 public RuleService(
     RuleRepository ruleRepository,
     ILogger logger,
     PapercutServiceBackendCoordinator coordinator,
     MessageWatcher messageWatcher,
     IRulesRunner rulesRunner,
     IMessageBus messageBus)
     : base(ruleRepository, logger)
 {
     _coordinator     = coordinator;
     _messageWatcher  = messageWatcher;
     _rulesRunner     = rulesRunner;
     this._messageBus = messageBus;
 }
Example #16
0
 public RuleService(
     RuleRespository ruleRespository,
     ILogger logger,
     PapercutServiceBackendCoordinator coordinator,
     MessageWatcher messageWatcher,
     IRulesRunner rulesRunner,
     IPublishEvent publishEvent)
     : base(ruleRespository, logger)
 {
     _coordinator    = coordinator;
     _messageWatcher = messageWatcher;
     _rulesRunner    = rulesRunner;
     _publishEvent   = publishEvent;
 }
Example #17
0
 public RuleService(
     IRuleRepository ruleRepository,
     ILogger logger,
     IBackendServiceStatus backendServiceStatus,
     MessageWatcher messageWatcher,
     IRulesRunner rulesRunner,
     IMessageBus messageBus)
     : base(ruleRepository, logger)
 {
     this._backendServiceStatus = backendServiceStatus;
     this._messageWatcher       = messageWatcher;
     this._rulesRunner          = rulesRunner;
     this._messageBus           = messageBus;
 }
Example #18
0
        public async Task SnipeChannelList([Remainder] IChannel channel = null)
        {
            if (channel == null)
            {
                channel = Context.Channel;
            }

            List <MessageData> msgList = MessageWatcher.MessageList.FindAll(m => m.Message.Channel == channel);

            if (!msgList.Any())
            {
                await Context.Channel.SendMessageAsync($"<@{Context.User.Id}> There's nothing to snipe!");

                return;
            }

            EmbedBuilder eb = new EmbedBuilder()
                              .WithColor(new Color(0x90, 0x10, 0x10))
                              .WithAuthor(channel.Name, Context.Guild.IconUrl);

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < msgList.Count && i < 10; i++)
            {
                var    msg    = msgList[msgList.Count - i - 1];
                string msgStr = msg.Message.Content;
                sb.AppendLine($"{i + 1}> {msg.Message.Author}:" +
                              $" {(msgStr.Length > 19 ? $"{msgStr.Substring(0, 18)}..." : msgStr != "" ? msgStr : "-No Message-")}" +
                              $" ({(msg.IsEdit ? "E" : "D")})" +
                              $" @ {msg.Time.TimeOfDay.ToString(@"hh\:mm\:ss")}");
            }

            eb.WithDescription(sb.ToString());

            try
            {
                await Context.Channel.SendMessageAsync($"<@{Context.User.Id}> List: ", embed : eb.Build());
            }
            catch
            {
                Logging.Log($"(!snipe channellist) I'm muted ;_;");
                MessageWatcher.SaveMessageList();
            }
        }
Example #19
0
        public async Task SnipeList([Remainder] IUser user)
        {
            List <MessageData> msgList = MessageWatcher.MessageList.FindAll(m => m.Message.Author == user);

            if (!msgList.Any())
            {
                await Context.Channel.SendMessageAsync($"<@{Context.User.Id}> There's nothing to snipe!");

                return;
            }

            EmbedBuilder eb = new EmbedBuilder()
                              .WithColor(new Color(0x90, 0x10, 0x10))
                              .WithAuthor(user);

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < msgList.Count && i < 10; i++)
            {
                var    msg    = msgList[msgList.Count - i - 1];
                string msgStr = msg.Message.Content;
                sb.AppendLine($"{i + 1}>" +
                              $" {(msgStr.Length > 26 ? $"{msgStr.Substring(0, 25)}..." : msgStr != "" ? msgStr : "-No Message-")}" +
                              $" ({(msg.IsEdit ? "E" : "D")})" +
                              $" @ {msg.Time.TimeOfDay.ToString(@"hh\:mm\:ss")}");
            }

            eb.WithDescription(sb.ToString());

            try
            {
                await Context.Channel.SendMessageAsync($"<@{Context.User.Id}>" +
                                                       $" List: ({Config.Instance.PrefixString}snipe index to expand)", embed : eb.Build());
            }
            catch
            {
                Logging.Log($"(!snipe list) I'm muted ;_;");
                MessageWatcher.SaveMessageList();
            }
        }
        public void handle_envelope_sent_then_message_successful_tracking_for_the_same_message_to_multiple_nodes()
        {
            MessageHistory.StartListening();

            var envelope1 = new EnvelopeToken();
            var node1 = new StubChannelNode();
            var node2 = new StubChannelNode();

            var messageWatcher = new MessageWatcher();

            messageWatcher.Handle(new EnvelopeSent(envelope1, node1));
            messageWatcher.Handle(new EnvelopeSent(envelope1, node2));

            MessageHistory.Outstanding().Count().ShouldBe(2);

            envelope1.Destination = node1.Uri;
            messageWatcher.Handle(new MessageSuccessful
            {
                Envelope = envelope1
            });

            MessageHistory.Outstanding().Count().ShouldBe(1);

            envelope1.Destination = node2.Uri;
            messageWatcher.Handle(new MessageSuccessful
            {
                Envelope = envelope1
            });

            MessageHistory.Outstanding().Any().ShouldBeFalse();
        }