2.1. RPCP

RPCP ist ein binäres Protokoll, was auf minimalen Datentransfer und absolute Dateneffizienz ausgelegt ist. Es werden neben dem sehr kurzen Header nur Nutzdaten übertragen. Objekteigenschaften werden in der Reihenfolge übermittelt, wie sie in der Dokumentation aufgeführt sind. Bei Strings und Arrays wird allerdings zusätzlich zu den reinen Nutzdaten die Länge des zu erwartenden Strings bzw. Arrays übermittelt. Dieses Protokoll könnte zwar auch für Drittanwendungen genutzt werden, ist aber etwas schwieriger zu verstehen als XML-RPC oder JSON-RPC. RPCP bedeutet Remote Procedure Call Protocol und ist kein Standardprotokoll. Es ist mithilfe dieser Dokumentation dennoch möglich, auch dieses Protokoll für eine Datenübertragung zu nutzen. Vor allem die effizientere Datenübertragung im Gegensatz zur XML-RPC oder JSON-RPC machen es attraktiv.
In diesem Protokoll werden die Daten möglichst effizient binär kodiert. Das heißt, es erfolgt keine Übermittlung von Informationen über Datentypen oder Feldnamen. Eine abstrakte Klasse, welche die Daten serialisiert, muss von ihren Eigenschaften absolut kompatibel mit der Klasse sein, welche die Daten deserialisiert.
Für die Übertragung werden die Daten escaped. Dabei wird jedes Zeichen mit dem Wert #10 durch \n ersetzt und jedes \ durch \\ ersetzt. Das Trennzeichen für den Header und die Nutzdaten ist das Zeichen #10. Ansonsten wird der binäre Datenstrom nicht verändert.
Der Header jeder Übertragung in diesem Protokoll ist folgendermaßen Aufgebaut:
Feld
Werte
Bytes
Beschreibung
Protokoll RPCP 4 Der Name des Übertragungsprotokolls.
Version 1.0 3 Die Version des Protokolls.
Kommando TFbmRpcpCommands 1 Das Kommando, welches ausgeführt werden soll (als Byte).
Kompression 0, 1 1 Legt fest, ob die Übertragung komprimiert wurde.
Keep-Alive 0, 1 1 Legt fest, ob die Verbindung nach der Übertragung aufrechterhalten werden soll.
Länge der Nutzdaten 0-2147483647 4 Legt die Länge der Nutzdaten fest.
Fehlercode 0-2147483647 4 Der Fehlercode, falls ein Problem aufgetreten ist.
Länge des Fehlers 0-256 1 Gibt die Länge der Fehlerbeschreibung an.
Fehlerbeschreibung Zeichenkette 0-256 Hier steht die Fehlerbeschreibung zur Verfügung, wenn eine Länge angegeben wurde.
Länge der Methode 0-256 1 Gibt die Länge der Methode an.
Methode Zeichenkette 0-256 Hier steht der Methodenname zur Verfügung, wenn eine Länge angegeben wurde.
Länge des Dateinamens 0-256 1 Gibt die Länge des Dateinamens an.
Dateiname Zeichenkette 0-256 Hier steht der Dateiname zur Verfügung, wenn eine Länge angegeben wurde.
Länge des Benutzers 0-256 1 Gibt die Länge des Benutzers an.
Benutzername Zeichenkette 0-256 Hier steht der Benutzername zur Verfügung, wenn eine Länge angegeben wurde.
Länge des Passworts 0-256 1 Gibt die Länge des Passworts an.
Passwort Zeichenkette 0-256 Hier steht das Passwort zur Verfügung, wenn eine Länge angegeben wurde.
Länge des User-Agents 0-256 1 Gibt die Länge des User-Agents an.
Methode Zeichenkette 0-256 Hier steht der User-Agent zur Verfügung, wenn eine Länge angegeben wurde.
Client Timeout 0-2147483647 4 Gibt das Verbindungstimeout des Clients an.
Der Header ist also mindestens 28 Bytes und maximal 1564 Bytes lang.
Die Nutzdaten der Datenübertragung werden genauso kodiert, wie der Header selbst. Bei der Übertragung werden die Daten grundsätzlich so kodiert:
Datentyp
Bytes
Boolean 4
Integer 4
Enum 4
Set 4
Int64 8
Double 8
Zeichenkette 4 (Längenangabe) + 1 Byte je Zeichen
Array 4 (Anzahl Elemente)
Klasse/Struktur 4 (Enthält die Größe der Klasse)
Wenn eine Methode mit zwei Parametern (Integer und Zeichenkette) aufgerufen werden soll, dann könnten die Nutzdaten folgendermaßen aussehen:
Quelltext-Beispiel:
1
#0#0#0#65#0#0#0#5'Hallo'
Die Nutzdaten enthalten die Zahl 65 und die Zeichenkette 'Hallo' mit einer Länge von 5 Bytes. Die oben gezeigte Darstellung wird z.B. in Delphi verwendet.
Themen dieser Ebene
2.1. RPCP
2.2. HTTP-Protokolle