Changelog 2018

25. Juni 2018

  • Neuer AppServer für User Apps steht zur Verfügung:
    Es ist heute im Laufe des Tages ein neuer AppServer für die Verwaltung von User Apps online gegangen. Wundert euch also nicht, wenn sich die AppServer Domain auf apps6.knuddelz.biz geändert hat oder ihr eine neue AppServer-ID zu sehen bekommt.
    Eventuell kann es notwendig sein, dass ihr für ExternalServerAccess eure Whitelist anpassen müsst.

22. Juni 2018

Begriffserklärung für die aktuellen Neuerungen:

App-Repository
Der Ort, wo Apps hochgeladen werden. Aktuell: Der FTP-Ordner einer App.

Runtime-Ordner
Ein Ordner auf dem AppServer, worin sich eine Kopie aller Dateien einer App aus dem App-Repository befindet.
Beim Start der App werden alle Dateien der App aus dem App-Repository in den Runtime-Ordner kopiert.

Shared-Ordner
Ordner im App-Repository, mit denen Code zwischen allen Apps geteilt werden kann.


  • KnuddelsServer.getUserAccess().isUserDeleted(userId)
    Liefert true, falls der (per userId) angegebene User gelöscht wurde.
    Achtung: Falls der User nicht existiert und niemals existiert hat, liefert die Methode false.
  • Neuer App-Hook: App.onUserDeleted(userId, userPersistence)
    Dieser Hook wird aufgerufen, wenn User, die einst im Channel waren (und somit accessible sind) gelöscht wurden.
    Wenn diese Hook aufgerufen wird wurde der User bereits gelöscht, daher bekommt man keine Daten mehr via getUser(userId).
    Sobald der Hook-Aufruf verlassen wir werden automatisch alle UserPersistence-Daten zu dem User gelöscht und er wird nicht mehr accessible sein.
    Der Zweck dieses Callbacks ist es, dass die App User-Daten gelöschter User, die ggf. noch an anderen Orten (z.B. AppPersistence) gespeichert sind, löschen bzw. aufräumen kann.
  • Detail-Info:
    Für den Fall, dass eine App deaktiviert war, während relevante User gelöscht wurden, werden die Aufrufe des Hooks (und anschließende Löschung) gedrosselt nach dem App-Start nachgeholt.
    Dies gilt auch für den Release des Features. Alle bisher gelöschten User werden dann einmalig durch den Hook durchlaufen und danach gelöscht werden.
    Für zukünfitge Löschungen funktioniert es so, dass diese sofort nach der Löschung des Users bei allen laufenden Apps den Hook und die Löschung auslösen.

    2-Phasen Release:
    Die Löschung der Persistenz-Daten und Accessibility gelöschter User wird vorerst nur dann aktiviert werden, wenn die App den onUserDeleted-Hook implementiert.
    Diese Übergangsphase gibt euch die Möglichkeit euch zu überlegen, ob ihr den Hook benötigt und ihn ggf. zu implementieren.
    Nach der Übergangsphase (mindestens 2 Monate) wird das System umgestellt werden, sodass die Persistenz-Daten und Accessibility stets sofort nach der Löschung eines Users gelöscht werden.

  • KnuddelsServer.listFiles(path)
    Mit dieser Funktion lassen sich alle Dateien und Ordner innerhalb eines Pfades des App-Runtime Ordners auflisten.
    Ruft man es mit „.“ oder „/“ auf, so bekommt man die Dateien und Ordner auf der obersten Ebene.
    Zur Unterscheidung haben Ordner einen „/“ am Ende, wohingegen Dateien dies nicht haben.
    Die Ausgabe ist alphabetisch (ignore case) sortiert, jedoch zuerst die Ordner und dann die Dateien.
    Die Ausgabe ist NICHT rekursiv. Dies kann aber leicht selbst gebaut werden, indem man einfach für jeden Ordner nochmals die Funktion aufruft.
  • Befehl verbessert:
    Die Test-Funktion /apps openCopyChannel kann nun mehrfach ausgeführt werden und erzeugt bei jedem Aufruf einen weiteren Sub-Channel (bis zum Limit von 9 Sub-Channels).
  • Verkürzung der www Resource-URLs
    Die API bietet Funktionen um öffentliche URLs zu den Dateien im www-Ordner zu bekommen.
    Diese URLs waren bisher sehr lang und kompliziert, was verschiedene Probleme verursachte.
    Nun sind sie kurz und einfach.
  • Verbesserung für Multi-(Sub-)Channel-Apps
    Bisher war es so, dass beim Start einer Sub-Channel App diese die App-Sourcen komplett neu aus dem App-Repository gezogen hat.
    Mit anderen Worten: Es konnte passieren, dass die App-Instanz im Sub-Channel neuer war als die im Haupt-Channel (bzw. in anderen Sub-Channeln).
    Durch die Änderung wird nun für Sub-Channel-Apps der gleiche Runtime-Ordner verwendet wie für den Haupt-Channel.
    Als Nebeneffekt davon können Sub-Channel-Instanzen nun nur noch starten, wenn die Haupt-Instanz bereits läuft.
    Ausserdem sind nun auch die www-Resource-URLs für alle Sub-Instanzen die gleichen. Bisher hatte jede Sub-Instanz eine eigene Kopie der Dateien mit einer eigenen URL.
  • Shared-Ordner für Source-Code und www
    Wenn man mehr als eine App hat, kommt es vor, dass man den gleichen Source-Code gerne für mehrere Apps verwenden möchte.
    Die App-Server bieten nun folgende Funktion an um dies zu vereinfachen:Man kann nun im App-Repository (FTP-Ordner) zwei Ordner anlegen, welche automatisch beim App-Start (für alle Apps) kopiert werden:
    ftp/shared/ – wird nach /shared/ kopiert.
    ftp/wwwShared/ – wird nach /www/shared/ kopiert und ist, wie alles in www, in der App-UI verfügbar.

  • Beispiel: (Datei-Struktur im FTP)
  • ftp/shared/script1.js
    ftp/wwwShared/script2.js
    ftp/wwwShared/style.css
    ftp/app1/main.js
    ftp/app1/www/index.html
    ftp/app2/main.js
    ftp/app2/www/index.html

  • Wenn nun app1 oder app2 startet, werden folgende Dateien im jeweiligen Runtime-Ordner verfügbar sein:
  • app1:
    - main.js
    - shared/script1.js
    - www/index.html
    - www/shared/script2.js
    - www/shared/style.css

    app2:
    - main.js
    - shared/script1.js
    - www/index.html
    - www/shared/script2.js
    - www/shared/style.css

  • KnuddelsServer.updateAppFiles()
    Updated alle Dateien der App frisch aus dem App-Repository (FTP-Ordner) in den Runtime-Ordner der App, ohne dabei die App zu stoppen / restarten.
    Der Rückgabe-Wert der Funktion liefert eine Liste der Dateien, die aktualisiert oder neu angelegt wurden. Gelöschte Dateien werden NICHT mit ausgegeben.
    Die Funktion aktualisiert ebenfalls die Shared-Ordner.

02.06.2018

Es gibt 2 neue API-Methoden:

  • Neue Methode: RootAppInstance.updateAppFiles()
  • KnuddelsServer.execute(scriptFile)
    Führt das angegebene Script aus. Vergleichbar mit require(), jedoch kann es wiederholt verwendet/ausgeführt werden. Dies kann z.B. in Verbindung mit updateAppFiles() benutzt werden um Teile der App im laufenden Betrieb auszutauschen bzw. neu zu laden.
    Achtung: Natürlich muss euer Code dafür entsprechend ausgelegt sein.

Mit diesen 2 Methoden in Kombination ist es nun möglich Module bzw. andere Teile einer App (z.B. Bilder) upzudaten ohne die App komplett neu starten zu müssen. Handelt es sich dabei um eine js-Datei, so kann man sie erneut ausführen lassen.

Dabei muss natürlich jeder selber darauf achten, dass er seinen Code so baut, dass dabei nichts kaputt geht.

p.s. um das auf dem DEV zu testen muss man das autoUpdate in der app.config deaktivieren (z.B: auskommentieren: // …) und die App einmal neustarten, damit die Änderung greift.

24.05.2018

  • Die neuen Entwickler-AGBs gingen online.

16. Mai 2018

  • Es wurden Änderungen vorgenommen, womit nun die FTP-Ordner auf dem DEV-Server sich ebenfalls synchronisieren.

13.04.2018

  • Die unten besprochene neue Methode AppContent.headerbarContent() ist nun auch auf dem Live-Servern (HTML-Chat und Standalone App) verfügbar!

    var appContent = AppContent.headerbarContent(new HTMLFile('index.html'), 100); // Höhe in PX
    user.sendAppContent(appContent);

    Zusätzliche Hinweise bezgl. Headerbar:
    1. Die Breite bei setSize() wird ignoriert. Die Höhe ist auf 20 – 500 limitiert.
    Client.getHostFrame().setSize(0, 200);
    2. Im HTMLChat scheint per default der Channel-Hintergrund durch die Headerbar durch.
    Um dies zu unterbinden muss man lediglich dem body eine Hintergrund-Farbe geben:
    z.B. mit <body bgcolor=“white“> oder analog dazu via CSS
  • Bug behoben, wodurch das Schließen der HTML-UI nicht funktionierte, wenn die Groß-/Kleinschreibung des Channel-Namen zuvor geändert wurde.

11.04.2018

  • Die neue Methode AppContent.headerbarContent() funktioniert nun sowohl in der Standalone App als auch im HTML-Chat. (Entwicklungsserver!)

10.04.2018

  • AppContent.headerbarContent() ist als neue Methode ist nun auf dem DEV-Server zum testen bereit. Notwendig ist dafür das Dev-Browser-Applet V9.0bzn+ oder die BETA-STAPP!

22.03.2018

  • Beim Stop/Update des AppServerModuls wird nun der Shutdown-Reason STOP_APP_SERVER_MODULE übergeben anstatt CHAT_SERVER_SHUTDOWN.
    Dies ermöglicht die Unterscheidung zwischen „Der Server fährt runter“ und „Das Modul fährt runter“.
  • Des Weiteren wurde der Stop-Grund REASON_CHAT_SERVER_RECONNECT zu CHAT_SERVER_RECONNECT umbenannt.
  • Nächstes Update: DEV-AppServer
    Neuerung: Bugfix AppInstance.updateApp()
    updateApp() updated nun [bei Multi-Channel-Apps] auch die Sub-Channel-Instanzen, nicht nur die Root-Instanz.

15.03.2018

  • Hang-Detection und Logik um das Abschalten von Apps bei einem Hang zu verhindern
  • Absicherung gegen Problem mit belegtem Server-Port zur Auslieferung der Profil-Einträge und Toplisten

26.02.2018

  • Es wird mit dem morgigen Update ein Bug behoben, der Probleme mit App-Events (Join, etc.) macht, wenn der Channel umbenannt wurde (Groß-Kleinschreibung). Mit AppServer-Update geht der Fix dev/live.

20.02.2018

  • Channel-Owner erhalten nun eine /m von James mit allen wichtigen Details, wenn eine App in ihrem Channel deinstalliert wird. Dies ist von besonderer Bedeutung, falls dies automatisch / ausversehen durch das Umbennen ihres MyChannels passiert.
  • Neue stop-the-world Detection, welche verhindern soll, dass Apps per 10 Sekunden Limit not-abgeschaltet werden, wenn der ganze Server kurz hängt.

19.02.2018

  • Ein Bug im /apps-Befehl wurde korrigiert, der dazu führte, dass Apps in der /apps-UI zwar sichtbar waren, aber nicht mehr gesteuert werden konnten, nachdem die Groß-/Kleinschreibung des Channel-Namens geändert wurde.
  • Ausserdem sollten nun Änderungen des Channel-Owners korrekt aktualisiert werden. Dies war bei einem mir bekannten Fall ein Problem.

12.02.2018

  • Ein Fehler, der zu Memory-Leaks auf den AppServern geführt hat, wurde behoben.

08.02.2018

  • Die „user not found“ Probleme sollten behoben sein. Wenn sie bei euch noch vorkommen, bitte gebt Bescheid.

02.02.2018

  • Optimierung der Memory-Parameter
  • Wir haben ab jetzt 8 AppServer-Instanzen (vorher: 6)
  • Verbessertes Logging zu Analyse-Zwecken

29.01.2018

Mit dem nächsten Serverupdate gibt es folgende neuen Methoden und Funktionen:

  • /botaccount <BOT-NICK> damit kann der Channel-Owner des App-Bots die Knuddel-Transfers des Bots einsehen.
  • KnuddelsServer.getPersistence().getDatabaseFileSize()
    Liefert die aktuelle Größe der Datenbank-Datei in Bytes. Es handelt sich hierbei um die App- sowie UserPersistence!
  • KnuddelsServer.getPersistence().getDatabaseFileSizeLimit()
    Liefert das aktuell für die App gültige DB-Size-Limit in Bytes.
    Wenn die App darüber kommt wird sie abgeschaltet.

23.01.2018

  • Änderungen bei setInterval();
    delay <= 0 ist nun nicht mehr erlaubt und wirft eine Exception um Fehler im Code aufzudecken und den Server nicht zu überlasten.
    delay < 10 [ms] wird nun automatisch auf 10ms hoch gesetzt um den Server nicht zu überlasten.

22.01.2018

  • regelmäßiger Domain-Expire (ExternalServerAccess) wurde verändert.
    Ihr erhaltet nun nur noch 3,5 Tage vor Ablauf alle 12 Stunden die Meldung, dass der Zugriff auf die externe Seite abläuft. Dadurch sollen die Netzwerkprobleme kompensiert werden.
  • /reconnect whitelisten
    Der Wunsch dass /reconnect auf der Whitelist steht, wurde nachgegangen. Allerdings kann es sein, dass diese Funktion nur via Applet/STAAP läuft.
  • knuddelAcount.use TransferReason
    Ein Fehlverhalten von zusammengesetzten Strings bei KnuddelAccount-Funktionen sollte behoben sein.
  • Ränge in den Profilen werden nun escaped.

Ältere Changelog-Einträge