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(); }
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(); }
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(); }
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(); }
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); }
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(); }
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 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(); } }
/// <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; }
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; }
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; }
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; }
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(); } }
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(); }