/// <summary> /// Versendet Benachrichtigungen über ein bestimmtes Ereignis an alle Registrierten Clients. /// </summary> /// <param name="eventName">Ereignisname</param> /// <param name="e">Ereignisargumente</param> private void OnServerEvent(string eventName, NotificationEventArgs e) { lock (_lockObject) { // Wenn für ein Ereignis mit dem angegebnen Namen Registrierungen vorhanden sind ... if (_subscriptions.ContainsKey(eventName) && _subscriptions[eventName] != null) { // Variablen für Ereignis-Delegaten und die Aufrufliste EventHandler <NotificationEventArgs> eventDelegate = null; Delegate[] invocationList = null; try { // Aufrufliste des Ereignisses abrufen invocationList = _subscriptions[eventName].GetInvocationList(); } catch (MemberAccessException) { // Ausnahme weiterwerfen throw; } // Wenn die Aufrufliste abgerufen werden konnte ... if (invocationList != null) { // Alle Einträge der Aufrufliste durchlaufen foreach (Delegate invocationItem in invocationList) { // Aufruf in entsprechenden Delegattypen casten eventDelegate = (EventHandler <NotificationEventArgs>)invocationItem; // Delegaten auf asynchrone Sende-Methode erzeugen AsyncNotificationDelegate innerDelegate = new AsyncNotificationDelegate(BeginSend); // Benachrichtigung asynchron versenden innerDelegate.BeginInvoke(eventName, e, eventDelegate, null, null); } } } } }
/// <summary> /// Versendet Benachrichtigungen über ein bestimmtes Ereignis an alle Registrierten Clients. /// </summary> /// <param name="eventName">Ereignisname</param> /// <param name="e">Ereignisargumente</param> private void OnServerEvent(string eventName, NotificationEventArgs e) { lock (_lockObject) { // Wenn für ein Ereignis mit dem angegebnen Namen Registrierungen vorhanden sind ... if (_subscriptions.ContainsKey(eventName) && _subscriptions[eventName] != null) { // Variablen für Ereignis-Delegaten und die Aufrufliste EventHandler<NotificationEventArgs> eventDelegate = null; Delegate[] invocationList = null; try { // Aufrufliste des Ereignisses abrufen invocationList = _subscriptions[eventName].GetInvocationList(); } catch (MemberAccessException ex) { // Ausnahme weiterwerfen throw ex; } // Wenn die Aufrufliste abgerufen werden konnte ... if (invocationList != null) { // Alle Einträge der Aufrufliste durchlaufen foreach (Delegate invocationItem in invocationList) { // Aufruf in entsprechenden Delegattypen casten eventDelegate = (EventHandler<NotificationEventArgs>)invocationItem; // Delegaten auf asynchrone Sende-Methode erzeugen AsyncNotificationDelegate innerDelegate = new AsyncNotificationDelegate(BeginSend); // Benachrichtigung asynchron versenden innerDelegate.BeginInvoke(eventName, e, eventDelegate, null, null); } } } } }