Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
de:netzer:commandinterface [2013/06/04 17:35] – [Der Befehlsbaum] svesch | de:netzer:commandinterface [2025/06/11 20:42] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <WRAP clear></ | ||
+ | ====== Kommandoschnittstelle ====== | ||
+ | Um mit Clientprogrammen auf den Netzer zuzugreifen, | ||
+ | |||
+ | |||
+ | ===== Funktionsprinzip ===== | ||
+ | |||
+ | Die Kommandoschnittstelle ist nachrichtenbasiert. D.h. sie definiert das Format von Nachrichten, | ||
+ | |||
+ | Eine Nachricht besteht aus einem Befehl und optional einem Wert. | ||
+ | |||
+ | Nachrichten ohne Wert dienen zum Auslesen von Parametern. | ||
+ | |||
+ | <WRAP column 30%> | ||
+ | **Client an Netzer** | ||
+ | < | ||
+ | </ | ||
+ | **Netzer an Client** | ||
+ | < | ||
+ | </ | ||
+ | <WRAP clear></ | ||
+ | |||
+ | Nachrichten mit Wert zum Schreiben. | ||
+ | |||
+ | <WRAP column 30%> | ||
+ | **Client an Netzer** | ||
+ | < | ||
+ | </ | ||
+ | **Netzer an Client** | ||
+ | < | ||
+ | </ | ||
+ | <WRAP clear></ | ||
+ | |||
+ | |||
+ | ===== Der Befehlsbaum ===== | ||
+ | |||
+ | Die Grundlage der Befehle ist der Befehlsbaum. Ein Befehl ist eine (nicht leere) Folge von alphanumerischen Zeichen (Kleinbuchstaben und Zahlen), die einen Pfad im Befehlsbaum beschreibt. {{ ci_example_plain.svg |Beispiel für einen Befehlsbaum}} | ||
+ | |||
+ | Schreibbefehle (d.h. Nachrichten mit Wert) müssen in einem Blatt des Befehlsbaums enden (d.h. genau einen Parameter identifizieren), | ||
+ | |||
+ | <WRAP center round box 90%> | ||
+ | <WRAP column 45%> | ||
+ | {{ci_example_leaf.svg|Befehl endet in einem Blatt}} | ||
+ | |||
+ | **Lesen:** | ||
+ | <WRAP column 40%> | ||
+ | **Client an Netzer** | ||
+ | < | ||
+ | </ | ||
+ | **Netzer an Client** | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | **Schreiben: | ||
+ | <WRAP column 40%> | ||
+ | **Client an Netzer** | ||
+ | < | ||
+ | </ | ||
+ | **Netzer an Client** | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | {{ci_inner_node.svg|Befehl endet in einem inneren Knoten}} | ||
+ | |||
+ | **Lesen:** | ||
+ | <WRAP column 40%> | ||
+ | **Client an Netzer** | ||
+ | < | ||
+ | </ | ||
+ | **Netzer an Client** | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | **Schreiben: | ||
+ | |||
+ | nicht möglich | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Kanten mit numerischen Werten ==== | ||
+ | |||
+ | Um zu vermeiden, dass für zusammenhängende numerische Intervalle jede Ziffer einzeln in den Befehlsbaum aufgenommen werden muss, gibt es Kanten mit numerischen Werten. | ||
+ | Diese erkennt man an den eckigen Klammern, die für das geschlossene Intervall von hexadezimalen Ziffern stehen, die für diese Kante möglich sind. | ||
+ | |||
+ | <WRAP center round box 60%> | ||
+ | {{ci_example_interval.svg|rot: | ||
+ | |||
+ | Für die Kante mit //[0-3]// sind die Hexadezimalziffern '' | ||
+ | </ | ||
+ | |||
+ | Mehrere Kanten mit numerischen Werten innerhalb eines Befehls werden als kontinuierliches Intervall interpretiert, | ||
+ | Nur die Intervallgrenzen werden durch die Konkatenation der Ziffern innerhalb der eckigen Klammern gebildet. | ||
+ | |||
+ | <WRAP center round box 60%> | ||
+ | Führt ein Pfad über zwei Kanten mit //[0-1]// bzw. //[0-c]//, so | ||
+ | entspricht dies dem mathematischen Intervall '' | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Kanalspezifische Befehle ===== | ||
+ | |||
+ | Neben den Befehlen aus dem Befehlsbaum, | ||
+ | |||
+ | |||
+ | ===== Nachrichten vom Client zum Netzer ===== | ||
+ | |||
+ | Nachrichten, | ||
+ | |||
+ | Wie genau Befehl und Wert miteinnader verbunden werden, hängt von dem benutzen Kanal ab. In der Regel werden sie als '' | ||
+ | <WRAP center round box 60%> | ||
+ | Beispiel WebSocket | ||
+ | <WRAP column 30%> | ||
+ | **Client an Netzer** | ||
+ | < | ||
+ | </ | ||
+ | **Netzer an Client** | ||
+ | < | ||
+ | </ | ||
+ | <WRAP clear></ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Nachrichten vom Netzer zum Client ===== | ||
+ | |||
+ | Nachrichten, | ||
+ | |||
+ | Die Nachricht selbst ist vom JSON-Datentyp Objekt und enthält eine oder mehrere Eigenschaften. Jede Eigenschaft entspricht einer Kante im Befehlsbaum. Dabei besteht der Schlüssel der Eigenschaft aus dem Zeichen, das der Kante entspricht. Führt die Kante zu einem inneren Knoten, so ist der Wert wiederum ein Objekt mit einer oder mehreren Eigenschaften. | ||
+ | Führt die Kante zu einem Blatt, so ist der Wert ein anderer JSON-Datentyp als Objekt. Welcher Datentyp genau, hängt von dem Parameter ab, den das Blatt identifiziert. Üblich sind Zeichenketten und boolsche Werte. Auch Parameter die an sich numerische Werte besitzen, werden in der Regel als Zeichenketten dargestellt. |