+ Parser Protokolle
Allgemein
Die hier beschriebenen Protokolle arbeiten textbasiert.
Schnittstelle zum Spracherkenner
Beschreibung
Beim ersten Connect wird ein einzeiliges Banner geschickt.
Als Eingabe werden Wortlisten der Form "[geh,wohin,der,pfeffer,waechst]" oder das Wort "close" erwartet, Leerzeichen werden ignoriert.
Die Antworten erfolgen generell in der Form "
123 Meldung", wobei "123" ein Statuscode ist und "Meldung" die eigentliche Meldung (also ein auszuführender Befehl oder eine Fehlermeldung).
Statuscode |
Bedeutung |
0 |
Syntaxfehler (Eingabe ist kein Prolog-Konstrukt) |
1 |
Eingabe verstanden, der auszuführende Befehl wird als Meldung mitgeschickt |
2 |
wie 1, der Befehl wird jedoch nicht sofort ausgefuehrt werden koennen |
5 |
Der Befehl in der Meldung konnte nicht ausgefuehrt werden |
6 |
Eingabe konnte nicht geparst werden, Meldung enthaelt u.U. Fehlergrund |
7 |
Queue wurde gerade geloescht |
8 |
Aborted wurde als Rueckgabe zurueckgegeben |
Ausser bei Statuscode 5 werden alle Meldungen sofort als Antwort auf die letzte Eingabe gesendet. Eine Meldung mit Statuscode 5 wird dann gesendet, wenn der Roboter an den Parser eine
failure-Meldung gesendet hat.
Schnittstelle zum Roboter
Beschreibung
Der Roboter nimmt die Verbindung zum Parser auf, empfaengt das Begruessungsbanner und wartet auf Befehle. Nachdem der Roboter einen Befehl empfangen hat, wird der naechste Befehl erst an ihn geschickt, wenn er
failure oder
success zurueckgemeldet hat.
Befehle
Die Befehle haben die Form "
aktion(id123, arg [, arg ...])". "id123" ist eine eindeutige Auftrags-ID, die immer an erster Stelle steht. Danach folgen Argumente für den Befehl.
Befehl |
Bedeutung |
goto(id, ort) |
Das zweite Argument ist der Zielort. Angegeben wird der eindeutige Bezeichner für den jeweiligen Raum (siehe EindeutigeRaumBezeichner). |
abort(id) |
Abruch des schon angegebenen Befehls. |
Rueckmeldungen vom Roboter
Meldung |
Bedeutung |
ack(id) |
Arbeitsauftrag mit der Id "id" wurde angenommen |
success(id) |
Der Arbeitsauftrag mit der ID "id" konnte erfolgreich ausgefuehrt werden |
failure(id) |
Fehlschlag |
aborted(id) |
Der Abbruch vom Arbeitsauftrag mit der ID "id" |
Beispieldialog
Beteiligte: Spracherkenner
E, Roboter
R, Parser
P
E > P: (stellt Verbindung her)
P > E: "new_recognizer_conn: recognizer3"
R > P: (stellt Verbindung her)
P > R: new_robbi_conn: robbi1
E > P: "[gehe,zu,wolfgang]"
P > R: "goto(cmd1, wolfgang)"
P > E: "1 goto(cmd1, wolfgang)"
R > P: "ack(cmd1)"
(R fuehrt den Befehl aus)
R > P: "success(cmd1)"
E > P: "[gehe,in,die,teekueche]"
P > R: "goto(cmd2, teekueche)"
P > E: "1 goto(cmd2, teekueche)"
(E schickt einen neuen Befehl, bevor R failure oder success gemeldet hat:)
E > P: "[[komm,in,die,programmierkunsthalle]]"
P > E: "2 goto(cmd3, iver_detlev_monique)
(R meldet, dass er cmd3 nicht ausfuehren konnte)
R > P: "failure(cmd3)"
P > E: "5 goto(cmd2, teekueche)"
P > R: "goto(cmd3, iver_detlev_monique)"
R > P: "success(cmd3)"
(Fehlerhafte Eingaben vom Erkenner)
E > P: "]]invalid"
P > E: "0 could not parse"
E > P: "[[gummi,krabbe]]"
P > E: "6 das verstehe ich nicht."
E > P: close
P > E: (beendet Verbindung)
R > P: close
P > R: (beendet Verbindung)
--
AlexGrupe - 02 May 2003