Einige von euch haben mehrere Apps in einem Channel laufen. Wie man diese Apps miteinander kommunizieren lässt, klären wir im heutigen Blogeintrag anhand eines Beispieles.
Je größer und aufwendiger ein App Projekt wird, umso größer wird auch der Quellcode. Daher macht es oft Sinn sich zu überlegen, ob es nicht besser wäre die App in mehrere kleinere (besser wartbare) Apps aufzuteilen. Doch die Kommunikation war nicht ganz so einfach zu realisieren, da eine Kommunikation zwischen den einzelnen Apps (bereits hier thematisiert) etwas aufwendig war und vor allem auch nicht von Knuddels aktiv unterstützt wird.
Dem wurde jetzt im nächsten Schritt der Entwicklung entgegen gewirkt. Mit den neuen Methoden getAllRunningAppsInChannel und getRunningAppInChannel ist es möglich auf elegante Art und Weise mit Apps aus dem selben Channel zu interagieren.
Beispielcode App A (main.js):
var App = (new function() { // Befehle anlegen this.chatCommands = { // Funktion /aaa wird definiert aaa: function(x, y, z) { // Liefert das AppAccess-Object var appAccess = KnuddelsServer.getAppAccess(); //Liefert die Instanzen aller anderen Apps, die gerade in diesem Channel laufen. var allRunningApps = appAccess.getAllRunningAppsInChannel(); // for-Schleife, die alle im Channel aktiven Apps durchläuft for (var i = 0; i < allRunningApps.length; i++) { var app = allRunningApps[i]; // Schickt ein Event an alle TochterChannel app.sendAppEvent('foo', 'a'); // Schickt ein Event an die Hauptinstanz der App app.getRootInstance().sendAppEvent('foo', 'a'); } } }; // Ausgabefunktion um anzuzeigen, welche Daten empfangen werden. this.onAppEventReceived = function(appInstance, type, data) { KnuddelsServer.getDefaultBotUser().sendPublicMessage(data); }; }());
Beispielcode App B (main.js):
var App = (new function() { this.chatCommands = { bbb: function(x, y, z) { var appAccess = KnuddelsServer.getAppAccess(); var allRunningApps = appAccess.getAllRunningAppsInChannel(); for (var i = 0; i < allRunningApps.length; i++) { var app = allRunningApps[i]; app.sendAppEvent('foo', 'b'); app.getRootInstance().sendAppEvent('foo', 'b'); } } }; this.onAppEventReceived = function(appInstance, type, data) { KnuddelsServer.getDefaultBotUser().sendPublicMessage(data); }; }());
Wenn das Vertrauen hoch ist,
ist Kommunikation einfach, schnell und effektiv.
Stephen Richards Covey
(1932-2012, amerikanischer Pädagoge, Autor und Unternehmer)
Wie findet ihr die Neuerung? Ist sie sinnvoll oder haltet ihr das ganze für unwichtig? Konstruktive Kritik und Meinungen sind in den Kommentaren willkommen.