Eine Nachricht ist eine strukturierte Zeichenkette, die in mehreren Blöcken übertragen werden kann. Dabei können zwei Nachrichten nicht vermengt werden und jeder Block muss sequentiell von Anfang bis Ende komplett übertragen werden.
Jede Nachricht besteht aus einem Nachrichtenkopf und einem Nachrichtenkörper. Der Kopf spezifiziert den Nachrichtentyp, eine Clientkennung, sowie die Länge des Nachrichtenkörpers. Der Nachrichtenkörper enthält die nachrichtenspezifischen Daten. Anhand der Länge des Nachrichtenkörpers kann die lesende Seite solange weitere Daten einlesen, bis die Nachricht komplett ist, da sichergestellt ist, das eine Nachricht immer nur komplett und nicht unterbrochen durch andere Nachrichten gesendet wurde.
Der Nachrichtenkopf hat eine fixe Länge von 32 Zeichen. Dabei sind die ersten beiden Zeichen der Nachrichtentyp, die nächsten zwanzig Zeichen die Clientkennung und die letzten 10 Zeichen die Länge des folgenden Nachrichtenkörpers in Bytes. Die Clientkennung ist eine beliebige Zeichenkette, die einen Client eindeutig identifiziert. Sie wird nach erfolgreicher Anmeldung vom Server an den Client übermittelt und muss vom Client bei jeder Nachricht mitgeschickt werden. Die Länge des Nachrichtenkörpers wird als ganze Zahl mit den Zeichen 0-9 dargestellt. Dabei können nicht genutzte Stellen mit Leerzeichen am Ende aufgefüllt werden.
Der Nachrichtenkörper besteht aus einer Abfolge von Werte- und Gruppenblöcken. Jeder Block wird durch das Zeichen „|“ (Pipe) von nächsten getrennt. Leere Blöcke sind nicht erlaubt.
Werteblöcke definieren einen bestimmten Wert, idem sie eine Wertbezeichnung und einen Wert getrennt durch ein „=“ enthalten. Die Wertbezeichnung ist eine beliebige Zeichenkette, die weder ein „=“, noch ein „|“ enthalten darf. Nach dem „=“ Zeichen wird der Wert in unten näher spezifiziertem Format angegeben.
Gruppenblöcke trennen bestimmte Gruppen von zusammengehörigen Werteblöcken. Gruppenblöcke bestehen nur aus einem Gruppennamen, der weder ein „=“ noch ein „|“ enthalten darf.
Kodierung der Datentypen
| DLE Datentyp | Formatierung | Beispiel/Bemerkungen |
|---|---|---|
| String | Keine | Strings werden direkt übergeben. Eventuell vorhandene „|“ Zeichen werden maskiert, indem ein „\“ vorangestellt wird. |
| Zahl | Vorkomma[.Nachkomma] | Die Vorkommastellen werden von optionalen Nachkommastellen durch einen Punkt getrennt. Tausenderstellen werden nicht gekennzeichnet. Negative Zahlen starten mit einem „-„, Exponentialformate werden nicht unterstützt. Erlaubt sind nur die Zeichen 0-9, der Punkt und das Minus. Beispiele: 123 567.9 77.0815 -698 -451.87 |
| Datum | JJJJ-MM-TT | JJJJ = Jahr im vierstelligen Format MM = Monat im zweistelligen Format, Monate 1-9 mit führender Null TT = Tag des Monats im zweistelligen Format, Tage 1-9 mit führender Null Beispiele: 2004-09-13 (13. Sep. 2004) 1995-12-01 (1. Dez. 1995) |
| Zeit | SS:MM[:ss] | SS = Stunden in 24h Format, Stunden 0-9 mit führender Null. MM = Minuten im zweistelligen Format, Minuten 0-9 mit führender Null. ss = optional die Sekunden im zweistelligen Format, Sekunden 0-9 mit führender Null. Beispiele: 12:31:05 01:00 12:30 |
| Datum/Zeit | JJJJ-MM-TT [SS:MM[:ss]] | Date und (optional) Time durch ein Leerzeichen getrennt. |
| Blob | String im Base64 Format | |
| Clob | String im Base64 Format |
