Example #1
0
 /// <summary>
 /// Feuert das Notify-Ereignis auf dem Client.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void FireNotifyEvent(object sender, NotificationEventArgs e)
 {
     // Wenn eine Ereignisprozedur registriert ist ...
     if (_clientHandler != null)
         // Ereignisprozedur aufrufen
         _clientHandler(this, e);
 }
Example #2
0
 /// <summary>
 /// Behandelt ein Ereignis einer Serverkomponente.
 /// </summary>
 /// <param name="sender">Herkunftsobjekt</param>
 /// <param name="e">Ereignisargumente</param>
 public void HandleServerEvent(object sender, NotificationEventArgs e)
 {
     // Ereignis feuern und Benachrichtigungen an die Clients versenden
     _service.RaiseEvent(_eventName, e.Message);
 }
Example #3
0
        /// <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);
                        }
                    }
                }
            }
        }
Example #4
0
 /// <summary>
 /// Sendet eine Ereignisbenachrichtigung asynchron.
 /// </summary>
 /// <param name="eventName">Ereignisname</param>
 /// <param name="e">Ereignisargumente</param>
 /// <param name="eventDelegate">Delegat auf registrierte Client-Ereignisprozedur</param>
 private void BeginSend(string eventName, NotificationEventArgs e, EventHandler<NotificationEventArgs> eventDelegate)
 {
     try
     {
         // Versuchen, Benachrichtigung an den Client zu senden
         eventDelegate(null, e);
     }
     catch (Exception)
     {
         // Benachrichtigung fehlgeschlagen! Registrierung aufheben
         _subscriptions[eventName] -= eventDelegate;
     }
 }