Ein zentraler Teil der RPC-Middleware ist für das Erstellen (Proxy) und
Interpretieren (Dispatcher) der Nachrichten zum Aufruf von Funktionen verantwortlich. Diesen zentralen Teil benötigt der Entwickler indirekt, da die Komponenten Proxy und Dispatcher die Kommunikation abwickeln. Dazu wird ein Aufruf einer Funktion codiert und an die unteren Schichten weitergeleitet, die wiederum die Nachricht an den Kommunikationspartner versenden. Beim Kommunikationspartner wird die Nachricht daraufhin entpackt, zusammengesetzt und an die Middleware weitergeleitet. Die Middleware führt dann die angeforderte Funktion aus.
Um die RPC-Middleware zu nutzen, muss der Entwickler zuerst eine Beschreibung des Interfaces erstellen. Genau heißt das, dass eine C-Struktur mit Funktionszeigern erstellt werden muss. Das Interface beschreibt alle Funktionen, die geteilt werden sollen, und muss Client und Server (Bild 1) zur Verfügung gestellt werden. Der Server implementiert das Interface mit dem funktionalen Code und registriert die Funktionen. Diese Registrierung benötigt der Dispatcher, damit er zu einem späteren Zeitpunkt eine Anfrage einer Funktion zuordnen kann.
Mit einem Skript erzeugt der Client aus dem Interface automatisch ein C-Modul, welches das Interface auf der Seite des Clients implementiert. In der Implementierung wird jedes Mal die Funktion »callRemoteFunction()« auf-gerufen, welche die jeweilige entfernte Funktion aufruft (Codebeispiel siehe Kasten).
Beispiel: Automatisch generierte C-Funktion auf Clientseite |
---|
1 uint32_t c(uint8_t a, uint16_t b) 2 { 3 uint32_t arr[2] = 4 { 5 a, b}; 6 uint32_t result = callRemoteFunction(c, arr, 2); 7 return (result); 8 } |
Die Deklaration ergibt sich aus der Interfacebeschreibung. Das »Marshalling« der Argumente (Zeile 3) und der entfernte Aufruf (Zeile 6) können automatisch generiert werden.
Um die Funktionen nutzen zu können, müssen die Funktionen des Interfaces auch beim Client zur Laufzeit registriert und mit den entfernten Funktionen verknüpft werden. Dazu holt die Middleware über eine vom Server vergebene ID die Informationen über die entfernten Funktionen und verknüpft sie mit den erzeugten Proxies. Damit kann der Entwickler die Funktion wie gewohnt aufrufen und benutzen. Server und Client können dann dieselben Funktionen nutzen.