a) Kann ich aus eigenen Modulen Nachrichten versenden?
b) Wenn ja, kann ich eigene IDs definieren (die Doku spricht nebulös von Modulnachrichten, ich konnte aber nichts finden)
Das macht IPS für dich.
Du kannst nur indirekt versenden.
Also wenn du eine Variable beschreibst oder erzeugst, feuert IPS die Nachrichten automatisch.
Was hast du den vor?
Michael
Ich will Events bzw. vielmehr Nachrichten mit Inhalt von „Services“ in IPS an Konsumenten verteilen.
Z.B.
10 Module, die Logmeldungen erzeugen
1 Konsument, der alle Meldungen in eine Datei schreibt
1 Konsument, der alle Meldungen > Loglevel Info ins IPS Log schreibt
1 Konsument, der alle Meldungen > Loglevel Critical per Email versendet
Mit Parents kann man das nicht vernünftig lösen, da noch an mehreren Stellen ähnliche Event Pattern verwendet werden könnten und das Konzept ja nur einen Parent vorsieht.
Ein Modul soll eine Nachricht (z.B. Lognachricht) erstellen.
Andere Module sollen diesen Typ noch Nachricht (z.B. per ID) abonnieren können (z.B. um Logmeldungen auf verschiedene Art und Weise zu speichern).
Dadurch wird eine Entkopplung von Sender und Empfänger erreicht.
Ja aber, wozu?
Warum? Wo brauchst du das?
Für die logische Abbildung von Hardware reicht die 1:n Anbindung.
Und ein praktisches Beispiel für vielleicht nicht Hardware spezifischer n:m Zuordnung hast du noch immer nicht gepostet.
Nachricht sind ja auch nicht gedacht um Nutzdaten zu transportieren.
Sicherlich kann man ein Modul schreiben und sind dann 6 Instanzen anlegen um auf verschiedenen LogLeveln verschiedene Aktionen auszuführen, aber das sind alles von IPS versendete Nachrichten.
Den Inhalt kannst du natürlich mit IPS_LogMessage festlegen.
Michael
z.B. um in einem Konfigurator festlegen zu können, welche welche Arten noch Nachrichten (Log, Push Notifications, …) auf welchem Weg bekommen solle, OHNE in dem Code, der das Routing in der Konfigurator-Instanz durchführt, zwingend wissen zu müssen, an welche Instanzen man solche Nachrichten senden muss.
Ich kann auch einfach in einer Variable ein serialisiertes Array als FIFO Puffer nutzen und mit Semaphores den konkurrierenden Zugriff regeln. Aber ich befürchte, das wird eher inperformant sein.
Ich weiß nicht, ob du für einen UDP-Port mehrere Registervariable registrieren kannst. Wenn nicht, müsste der Eventhandler das dort auseinander nehmen.
Mir fehlt weiteres know how, ist nur ein Denkanreiz.
Die Modulinstanz registriert sich für die Change-Events der Variable
Jetzt werden sehr schnell sehr viele neue Werte aus verschiedenen Threads in die Variable geschrieben
Meine Frage dazu:
Ist garantiert, dass für jede Änderung der Variable ein Event generiert und der MessageSink der Modulinstanz aufgerufen wird?
Oder kann es bei hoher Rate der Änderungen vorkommen, dass nicht alle Änderungen per Event gemeldet werden?
Bzw. gibt es ggf. andere Rahmenbedingungen, unter denen nicht alle Änderungen gemeldet werden?