Was ist das?
Der Strawberry Communication Standard (Strawberry’s Kommunikationsstandard) (kurz stbm, Strawberry Communication Standard) ist ein Kommunikationstandard für unsere Projekte. Das heißt das alle unsere Projekte, die was mit Nachrichtenübertragungen oder ähnliches zu tun haben, dieses System nutzen. Aktuell haben wir 2 Hauptversionen des Strawberry Communication Standards. Um das alte System vom neuen System zu unterscheiden zu können, führen wir das Strawberry Communication System ein (kurz stbm). Dieses Kommunikationssystem bildet einen Standard für Strawberry Chat und möglicherweise für andere Projekte von Strawberry Foundations.Versionen des Strawberry Communication Standards
Aktuell planen wir eine Umbennenung der kurzen Version vom Strawberry Communication Standard.
Die aktuelle kurze Version ist
stbm
(Strawberry Communication Standard).
Wir planen dies zu stbc
umzubennenen um möglicherweise weniger Verwirrung zu verursachenStrawberry Communication Standard v1
Version 1
(stbmv1/stbcv1)
ist eine “Legacy” Version und erhält keine Updates mehr.
Diese Version sendete pure Python-Strings über Sockets und der Client empfängt diese ohne vieles entschlüsseln der Daten.
Die Daten werden jediglich nur entkodiert.Hinweis
Hinweis
Für diese Version bieten wir keinen weiteren Support an.
Die letzte Strawberry Chat Version (v1.8.3) mit diesem Kommunikationssystem erschien am 10. Dezember 2023.
Dies war die letzte Legacy Version von Strawberry Chat und wird mit der Veröffentlichung von v1.10 oder v1.11 keinen weiteren Support erhalten.
Strawberry Communication Standard v2
Version 2
(stbmv2/stbcv2)
ist eine neue, verbesserte Version unseres Kommunikationssystemes.
Diese verwendet JSON, um Nachrichten über den Benutzern zu übertragen.
Mit unserem neuen Kommunizierungsstandard können Nutzer nun ihre eigenen Message Builder erstellen und damit selber entscheiden wie eine Nachricht angezeigt sein soll,
unabhängig davon wie der Server eigentlich die Nachrichten gesendet hätte.Strawberry Communication Standard v2.1
Strawberry Communication Standard v2.1
Zusätzlich gibt es noch Version 2.1
(stbmv2.1)
für Nachrichten-Proxying, diese Version ist aber aktuell nicht verfügbar.Strawberry Communication Standard v3
Version 3
(stbcv3)
wurde mit dem Rust-rewrite von Strawberry Chat veröffentlicht.
Diese Version implementiert das senden von JSON-Daten auf beiden Seiten (Server & Client).
Das bedeutet, dass der Client dann auch JSON senden muss. Aufgrund von aktuellen Performanceproblemen steht dies aber noch nicht fest und könnte daher sich noch ändern.
Durch die Implementierung von JSON für den Client stehen viele neue Möglichkeiten offen. Dadurch kann der Client spezielle Daten am Server senden und dieser verarbeitet diese.
So könnten Commands, die Client-spezifisch sind, am Server verarbeitet werden.Die Veröffentlichung fand am 19. April 2024 statt. Version 3 ist nicht rückwärtskompatibel.Unterstützung
Unterstützte Features | stbcv1 | stbcv2 | stbcv2.1 | stbcv3 |
---|---|---|---|---|
Python Strings¹ | ✅ | ✅ | ✅ | ❌ |
pure String Transfer² | ✅ | ❌ | ✅ | ❌ |
Kompatiblitätsmodus | ✅ | ✅ | ✅ | ❌ |
JSON Server-to-Client³ | ❌ | ✅ | ✅ | ✅ |
JSON Client-to-Server⁴ | ❌ | ❌ | ❌ | ✅ |
Msgpack | ❌ | ❌ | ❌ | ✅ |
Python Strings¹
Python Strings¹
Das Feature Python Strings¹ bedeutet so viel wie “Unterstützung für reine Python-Strings”.
Dies sollte in jedem Fall immer “Ja”/”✅” sein, andersfalls können keine Strings verwendet werden.Die Interne Bezeichnung für Python Strings lautet
ps_com
oder feat@ps
pure String Transfer²
pure String Transfer²
Das Feature “pure String Transfer” wird für die erste Version des Strawberry Communication Standards verwendet.
Dieses Feature verwendet reine Python Strings zum austausch von Daten und Events.Die Interne Bezeichnung für pure String Transfer lautet
pST_com
oder feat@pst
JSON Server-to-Client³
JSON Server-to-Client³
Das JSON Feature Server-to-Client ist die Weiterentwicklung von pure String Transfer und bietet nun eine kompakte Datenstruktur an,
um einfach Daten und Events am Client zu senden. So können auch “leise” Events im Hintergrund passierenDie Interne Bezeichnung für JSON Server-to-Client lautet
json_stc
oder json@stc
JSON Client-to-Server³
JSON Client-to-Server³
Das JSON Feature Client-to-Server ist die Implementierung von JSON für den Server, sodass der Server nun JSON-Daten vom Client annimmt statt pure String Transfer² Daten.
Die zweite Version des Strawberry Communication Standards verwendet von Client zum Server weiterhin pure String Transfer,
während die dritte Version vermutlich JSON Client-to-Server verwendet.Die Interne Bezeichnung für JSON Client-to-Server lautet
json_cts
oder json@cts
Datentypen (stbcv2)
Ab stbcv2 verwenden wir neue und eigene JSON-Datentypen. Hier ist ein kleiner überblick von unseren DatentypenNutzernachrichten (user_message)
Nutzernachrichten (user_message)
Nutzernachrichten (
user_message
) sind Nachrichten die von einem Nutzer gesendet wurden.
Der Datentyp beinhaltet wichtige Daten, wie z.B. der Nutzername, das Badge, die Rollenfarbe und am wichtigsten, die Nachricht des Nutzers.
Die Struktur könnte sich mit stbcv3 ändern.JSON
Systemnachrichten (system_message)
Systemnachrichten (system_message)
Systemnachrichten (
system_message
) sind Nachrichten die vom System gesendet wurden.
Dort handelt es sich meist um Nachrichten, dass ein neuer Nutzer beigetreten ist, allerdings können Systemnachrichten auch die eingebauten Slash-Commands sein.
Dieser Datentyp ist ziemlich kompakt und sehr klein. Dies könnte sich aber eventuell mit stbcv3 ändern.JSON
Benachrichtigungs-Backend (stbchat_notification)
Benachrichtigungs-Backend (stbchat_notification)
Benachrichtigungs-Backend (
stbchat_notification
) sind interne Nachrichtenevents die vom System gesendet wurden.
Diese Nachricht siehst du nicht, aber führt im Hintergrund ein Prozess aus, nämlich der, um dir eine Desktop-Benachrichtigung zu senden.
Dieser Datentyp ist etwas komplexer. Die Struktur dieses Datentypes könnte sich mit stbcv3 ändern.JSON
Chatdatenübertragungs-Backend (stbchat_backend)
Chatdatenübertragungs-Backend (stbchat_backend)
Chatdatenübertragungs-Backend (
stbchat_backend
) sind interne Nachrichtenevents die vom System gesendet wurden.
Diese Nachricht siehst du nicht, aber führt im Hintergrund ein Prozess aus. Dieser Prozess kann unterschiedlich sein.
Aktuell sendet stbchat_backend
nur den Nutzernamen an den Client zurück. Der Client kann den Nutzernamen dann für verschiedene Dinge verwenden.
Dieser Datentyp ist aufgrund seiner Neuheit sehr klein. Mit stbcv3 oder vielleicht sogar stbcv2 erhält dieser Datentyp allerdings noch mehr Features und damit eine höhere Bedeutung.JSON
Was? Wieso? Wie?
Du wunderst dich vielleicht und fragst dich was das überhaupt ist? Naja, dies ist wie 2 Socket Instanzen miteinander Kommunizieren. Dies wurde ursprünglich für Strawberry Chat entwickelt um Daten zwischen Server und Client, wie zum Beispiel Nutzername, Badge und Nachrichten zu senden, aber wir haben uns dazu entschieden, ein kleines Tutorial zu geben wie du dieses System auch in deinem Client implementieren kannst!JSON-Kommunikation (JSON-Communication) ist auch ein anderer Name für unser Strawberry Communication Standard v2 (
stbmv2
). Hier kannst du mehr darüber erfahrenDie Idee
Das originale Konzept dafür wurde auf unserem Projekteboard auf GitHub GitHub am 10. November 2023 gepostet. Beachte das dies aktuell nur in Deutsch zur Verfügung steht.Beispielcode
Dies ist ein sehr einfaches Beispiel für JSON-Kommunikation welches in Strawberry Chat verwendet wird
Unterstützte Versionen in Strawberry Chat
Dies gilt nur für Strawberry Chat, kein anderes Programm
v1.8.0 - v1.8.2 | v1.8.3 | v1.9.0 | |
---|---|---|---|
Standard <=2.4.0 | ✅ | ✅ | ❌ |
Standard v2.5.0 | ❌ | ❌ | ✅ |
Standard >=v2.5.1 | ✅ (CM) | ✅ (CM) | ✅ (CM) |
Lite <=v1.0.1 | ✅ | ✅ | ❌ |
Lite >=v1.1.0 | ❌ | ❌ | ✅ |
Nano <=v1.0.1 | ✅ | ✅ | ❌ |
Nano >=v1.1.0 | ❌ | ❌ | ✅ |
Berryjuice-pico | ✅ | ✅ | ❌ |
Kompatiblitätsmodus (CM)
Seit Client v2.5.1 haben wir ein Feature hinzugefügt welches Nutzern erlaubt, sich mit alten Servern zu verbinden. Dies heißt Kompatiblitätsmodus. Um den Kompatiblitätsmodus zu aktivieren musst du entwedercompatibility_mode: true
zu deinem Legacy Servereintrag hinzufügen oder starte den Client mit dem --compatibility-mode
Argument