Kommunikation zwischen zwei Apps 2.0

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 ihr euch die Scriptschnipsel anseht, fällt auf, dass beide Apps sich kaum unterscheiden. Sie sollen lediglich verdeutlichen, wie die Kommunikation zwischen zwei Apps im selben Channel praktiziert werden sollte, da dies die einzige von Knuddels offiziell unterstützte Methode ist und auch zukünftig funktionieren wird.

 

Wenn das Vertrauen hoch ist,
ist Kommunikation einfach, schnell und effektiv.

Stephen Richards Covey
(1932-2012, amerikanischer Pädagoge, Autor und Unternehmer)
Damit ist ein weiterer Schritt der Entwicklung im Bereich der internen Kommunikation beschritten. Denn wenn man zurück sieht, so kann man die Schritte auf folgende zusammenfassen:

 

Schritt 1:
Tochterchannelunterstützung (Apps können auch in Tochterchannel laufen)
Schritt 2:
Kommunikation mit Apps, die im Tochterchannel laufen
Schritt 3:
Kommunikation mit Apps die im selben Channel (inkl. Tochterchannel) laufen

 

Jetzt ist nur die Frage, ob der nächste Schritt sein wird, mit den eigenen Apps kommunizieren zu können, auch wenn sie in verschiedenen Channel installiert sind. Doch ob das kommen wird, kann noch nicht gesagt werden.

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.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s