// Diese Methode schickt eine Nachricht asynchron ab. Hierbei // werden alle registrierten Abonnementen benachrichtigt. public static void SendMessageAsync(MessageEventArgs eventArgs) { // Implementierung der SendMessage-Methode MessageEventHandler handler; // Der Handler muss gesperrt werden, da ihn verschiedene Threads // aufrufen können. lock(_lockMessage) { handler = MessageFired; } // Wenn es keine Abonnementen gibt, ist der Handler NULL. if(handler != null) { // Jeder Abonnement kann in verschiedenen Threads benachrichtigt werden. Delegate[] invocationList = handler.GetInvocationList(); foreach(MessageEventHandler eventHandler in invocationList) { try { // Führe nun durch die interne Klasse den Eventhandler in allen // nötigen Threads aus. MessageEventNotifier eventNotifier = new MessageEventNotifier(eventHandler); ThreadPool.QueueUserWorkItem(eventNotifier.Start, eventArgs); } // Wenn es zu einem Fehler kommen sollte, soll nichts weiter gemacht werden // und nur der nächste Handler aufgerufen werden. catch { } } } }
public override void Xmpp_OnMessage(object sender, Messaging.MessageEventArgs e) { base.Xmpp_OnMessage(sender, e); msgFriend(sender, e); //RunOnUiThread(() => updateIndexUserRecentMensages(e) //); updateListCardUi(); }
void msgFriend(object sender, Messaging.MessageEventArgs e) { string friend = e.From; int index = e.From.LastIndexOf("@"); if (index > 0) { friend = e.From.Substring(0, index); } this.msgs = getMsgs(friend); AppCore.Message m = new AppCore.Message(friend, e.Body, DateTime.Now, false); this.msgs.Add(m); saveMsg(friend, m); //RefrashRecycleView(); }
// Und die Implementierung des Empfangs static void MessageBroker_MessageFired(MessageEventArgs e) { // Verarbeite die Nachricht Console.WriteLine("Message: {0}", e.Message); }