virtual public void UpdateEventTypesAndTimers() { IEnumerable <EventType> dashboardtypes = new List <EventType> (); IEnumerable <EventType> timelinetypes; if (Dashboard != null) { /* Timers */ IEnumerable <Timer> timers = Dashboard.List.OfType <TimerButton> ().Select(b => b.Timer).OfType <Timer> (); Timers.AddRange(timers.Except(Timers)); /* Update event types list that changes when the user adds or remove a * a new button to the dashboard or after importing a project with events * tagged with a different dashboard */ dashboardtypes = Dashboard.List.OfType <EventButton> ().Select(b => b.EventType); } /* Remove event types that have no events and are not in the dashboard anymore */ foreach (EventType evt in EventTypes.Except(dashboardtypes).ToList()) { if (Timeline.Count(e => e.EventType == evt) == 0) { EventTypes.Remove(evt); } } EventTypes.AddRange(dashboardtypes.Except(EventTypes)); timelinetypes = Timeline.Select(t => t.EventType).Distinct().Except(EventTypes); EventTypes.AddRange(timelinetypes.Except(EventTypes)); /* Remove null EventTypes just in case */ EventTypes = new RangeObservableCollection <EventType> (EventTypes.Where(e => e != null)); }
private async System.Threading.Tasks.Task ProcessEvent(string eventTypeName, string message) { if (EventHandlerTypes.ContainsKey(eventTypeName)) { // New! using (var scope = ServiceScopeFactory.CreateScope()) { System.Collections.Generic.List <System.Type> subscriptions = EventHandlerTypes[eventTypeName]; foreach (var subscription in subscriptions) { //var eventHandler = // System.Activator.CreateInstance(subscription); // Updated! var eventHandler = scope.ServiceProvider.GetService(subscription); if (eventHandler == null) { continue; } var eventType = EventTypes .Where(current => current.Name.ToLower() == eventTypeName.ToLower()) .FirstOrDefault(); var @event = Newtonsoft.Json.JsonConvert .DeserializeObject(value: message, type: eventType); var concreteType = typeof(Domain.Core.Bus.IEventHandler <>).MakeGenericType(typeArguments: eventType); await System.Threading.Tasks.Task.Run(() => { concreteType.GetMethod("Handle").Invoke(eventHandler, new object[] { @event }); }); } } } }
private void btnCreateEvent_Click(object sender, RoutedEventArgs e) { MainEvent wndEvent = new MainEvent(); wndEvent.ShowDialog(); EventType eventType = cbEventTypes.SelectedItem as EventType; EventTypes eventTypes = new EventTypes(); cbEventTypes.ItemsSource = eventTypes; if (eventType != null) cbEventTypes.SelectedItem = eventTypes.Where(item => item.TypeId == eventType.TypeId).FirstOrDefault(); UpdateCalendar(); }