public async Task ShouldResendMessageToEveryoneInTheSameGroupExceptTheSender( ConnectedClient sender, BroadcastMessage message, List <ConnectedClient> clientsInGroup, [Frozen] Mock <IConnectedClientStore> clients, BroadcastMessageHandler sut) { var senderId = sender.ClientId; Assert.NotEqual(senderId, message.SenderId); clients.Setup(x => x.FindInGroups(It.Is <IEnumerable <string> >( x => x.Count() == 1 && x.First() == sender.Group))) .Returns(clientsInGroup.Append(sender)); await sut.HandleAsync(sender, message, Cts.Token); // Sync senderId to broadcasted message since it's senderId might be not set by front end. Assert.Equal(senderId, message.SenderId); Mock.Get(sender.Connection).Verify(x => x.SendAsync(It.IsAny <object>(), Cts.Token), Times.Never); foreach (var client in clientsInGroup) { Mock.Get(client.Connection).Verify(x => x.SendAsync(message, Cts.Token)); } }
public NotificationsController(BroadcastMessageHandler notificationsMessageHandler) { _socketHandler = notificationsMessageHandler; }
private void GUIEditor_Load(object sender, EventArgs e) { broadcasthandler = broadcasthook; Singleton <Broadcaster> .INSTANCE.handlers.Add(broadcasthandler); CollectionEditorHook.FormClosed += CollectionEditor_FormClosed; Type[] Types = Assembly.GetExecutingAssembly().GetTypes(); foreach (var Type in Types) { GUIAppearenceNameAttribute appearenceName = Type.GetCustomAttribute <GUIAppearenceNameAttribute>(); GUIWidgetNameAttribute widgetName = Type.GetCustomAttribute <GUIWidgetNameAttribute>(); if (appearenceName != null) { GUIAppearenceDataTypeAttribute dataType = Type.GetCustomAttribute <GUIAppearenceDataTypeAttribute>(); ToolStripMenuItem appearenceToolStrip = new ToolStripMenuItem(); //var appearence = Activator.CreateInstance(Type) as Appearence; appearenceToolStrip.Text = appearenceName.DisplayName; appearenceToolStrip.Click += (g, o) => { if (ActiveWidget != null) { var appData = Activator.CreateInstance(dataType.Type) as AppearenceData; appData.Name = ActiveWidget.appearence.Count.ToString(); widgetData.appearenceData.Add(appData); ActiveWidget.FromWidgetData(widgetData); //propertzGrid1.SelectedObject = appData; //ActiveWidget.appearence.AddAppearence(ActiveWidget.appearence.Count.ToString(), Activator.CreateInstance(Type) as Appearence); } }; addToolStripMenuItem.DropDownItems.Add(appearenceToolStrip); } if (widgetName != null) { GUIWidgetDataType data = Type.GetCustomAttribute <GUIWidgetDataType>(); ToolStripMenuItem widgetToolStrip = new ToolStripMenuItem(); widgetToolStrip.Text = widgetName.DisplayName; widgetToolStrip.Click += (g, o) => { Widget widget = Activator.CreateInstance(Type) as Widget; widget.SetBounds(0, 0, 100, 100); ActiveWidget = widget; widgetData = Activator.CreateInstance(data.Type) as WidgetData; widgetData.Size = new Vector2(100, 100); ActiveWidget.data = widgetData; propertzGrid1.SelectedObject = this.widgetData; Singleton <GUI> .INSTANCE.widgets.Add(widget); }; this.toolStripDropDownButton1.DropDownItems.Add(widgetToolStrip); } } }
private void GUIEditor_Load(object sender, EventArgs e) { broadcasthandler = broadcasthook; Singleton<Broadcaster>.INSTANCE.handlers.Add(broadcasthandler); CollectionEditorHook.FormClosed += CollectionEditor_FormClosed; Type[] Types = Assembly.GetExecutingAssembly().GetTypes(); foreach (var Type in Types) { GUIAppearenceNameAttribute appearenceName = Type.GetCustomAttribute<GUIAppearenceNameAttribute>(); GUIWidgetNameAttribute widgetName = Type.GetCustomAttribute<GUIWidgetNameAttribute>(); if (appearenceName != null) { GUIAppearenceDataTypeAttribute dataType = Type.GetCustomAttribute<GUIAppearenceDataTypeAttribute>(); ToolStripMenuItem appearenceToolStrip = new ToolStripMenuItem(); //var appearence = Activator.CreateInstance(Type) as Appearence; appearenceToolStrip.Text = appearenceName.DisplayName; appearenceToolStrip.Click += (g, o) => { if (ActiveWidget != null) { var appData = Activator.CreateInstance(dataType.Type) as AppearenceData; appData.Name = ActiveWidget.appearence.Count.ToString(); widgetData.appearenceData.Add(appData); ActiveWidget.FromWidgetData(widgetData); //propertzGrid1.SelectedObject = appData; //ActiveWidget.appearence.AddAppearence(ActiveWidget.appearence.Count.ToString(), Activator.CreateInstance(Type) as Appearence); } }; addToolStripMenuItem.DropDownItems.Add(appearenceToolStrip); } if (widgetName != null) { GUIWidgetDataType data = Type.GetCustomAttribute<GUIWidgetDataType>(); ToolStripMenuItem widgetToolStrip = new ToolStripMenuItem(); widgetToolStrip.Text = widgetName.DisplayName; widgetToolStrip.Click += (g, o) => { Widget widget = Activator.CreateInstance(Type) as Widget; widget.SetBounds(0, 0, 100, 100); ActiveWidget = widget; widgetData = Activator.CreateInstance(data.Type) as WidgetData; widgetData.Size = new Vector2(100, 100); ActiveWidget.data = widgetData; propertzGrid1.SelectedObject = this.widgetData; Singleton<GUI>.INSTANCE.widgets.Add(widget); }; this.toolStripDropDownButton1.DropDownItems.Add(widgetToolStrip); } } }