-
Notifications
You must be signed in to change notification settings - Fork 3
panelServer
- Server → klient v1.1
- Klient → server v1.1
Panel server je server implementující jednoduchý textový protokol vlastního návrhu.
Panel server je primární komunikační kanál pro připojené klienty, umožňuje připojení panelů, regulátorů, debugovacích nástrojů apod. Panel server umožňuje komunikaci v obou směrech (server → klient, klient → server).
Panel server je zakompilovaný přímo v hJOPserveru, spouští se automaticky při spouštění systémů. Panel server pro většinu příkazů vyžaduje autentizaci.
- Se serverem se komunikuje výhradně v kódování UTF-8.
- Výchozí port serveru je 5896.
- Komunikace probíhá ve zprávách. Zpráva je jeden řádek ukončený znakem LF.
- Každá strana může posílat zprávy kdykoliv uzná za vhodné, žádná strana by neměla předpokládat, že na zprávu, která me ve specifikaci uvedeno, že na ni následuje odpověď, přijde odpověď hned jako další zpráva.
Každá zpráva se skládá z několika řetězců dohromady spojených znakem ;
(středník). Řetězec sám může být složený z dalších podřetězců, toto je vždy
definováno u konkrétní zprávy níže.
Příklad:
-;MOD-CAS;STOP;
je validní zpráva skládající se z řetězců:
-
MOD-CAS
STOP
Středník na konci zprávy je nepovinný.
Pozor: zpráva může obsahovat prázdný řetězec, např. -;VYL;;AC;
, kde prázdný
řetězec mezi dvěma středníky musí být korektně naparsován jako prázdné pole a
text AC
musí být naparsován jako text na indexu 3 (při indexování zleva od nuly).
Pozor: Protokol spoléhá na konkrétní pozice řetězců, je proto nutné příchozivší text správně parsovat!
Text uvedený ve složených závorkách se nedělí!
Příklad:
-;VYL;{ahoj;baba}
je naparsován takto:
-
VYL
ahoj;baba
nikoliv takto:
-
VYL
{ahoj
baba}
Protože protokol obsahuje několik speciálních znaků (zatím víme jen o středníku), ale v budoucnu se objeví další, je nutné escapovat text od uživatele právě pomocí složených závorek. Tím se předejde tomu, co je v terminologii webů nazváno SQL injection.
Váš program by měl všechny vstupy od uživatele zavírat do složených závorek a neumožnit uživateli zadat složené závorky!
Uživateli také zakažte vložit znak nového řádku. Znaky
{
}
- newline
jsou jediné tři znaky, které je potřeba uživateli zakázat vložit.
Všimněte si také, že poslední příklad naparsoval text {ahoj;baba}
jako
ahoj;baba
, nikoliv jako {ahoj;baba}
. Toto chování je správné a chtěné!
Vaše parsovátko by s ním mělo počítat
Je také nutné počítat s vnořenými řetězci. Příklad:
-;SOB;{LOS;KLOKAN;{VEDRO;VUL}};
je naparsován takto:
-
SOB
LOS;KLOKAN;{VEDRO;VUL}
Po zavolání parsovátka na 2. položku je naparsováno:
LOS
KLOKAN
VEDRO;VUL
Řetězec VEDRO;VUL
lze opět parsovat dále.
Teď si jistě dovedete představit hezké rekurzivní parsovátko, které vytváří slovníkovou strukturu. Toto ale není dobrý nápad, protože některé zprávy mají jiné oddělovače. Příklad:
-;TEST;{AHOJ|BABA}
- Zpráva může obsahovat klíčová slova a čisté stringy: například konkrétní text štítku, výluky, poznámku k soupravě, ...
-
Na velikosti písmen klíčových slov nezáleží!
SET-PROPERTY
=set-property
=SeT-prOPeRtY
- Jako kořenový oddělovač je vždy použit středník.
- Nultý řetězec každé zprávy je buď:
- unikátní id oblasti řízení (například
klb
) značící, že zpráva patří určité oblasti řízení, nebo -
-
(spojovník) značící, že zpráva patří klientu/serveru obecně, nikoliv oblasti řízení (např. příkaz k nastavení modelového času).
- unikátní id oblasti řízení (například
Níže následuje popis konkrétních zpráv, v tomto popisu budeme používat speciální značky:
-
[]
(hranaté závorky) značí, že na tomto poli může následovat jedna z hodnot uvedených v závorce; hodnoty jsou oddělené čárkou. Například:[OK,ERR]
značí, že text může být buďOK
neboERR
. -
zprava
(libovolný podtržený text) značí, že podtržený text není klíčové slovo, ale konkrétní text významu podtrženého slova. Například poznamka k bloku specifikuje, že na tomto místě má být libovolný text značící poznámku k bloku. -
odkaz
(text italic) specifikuje, že na tomto místě je další zpráva, která je definovaná v odkazu. Například-;specifikace hnaciho vozidla
. -
/parametr/
v lomítkách je nepovinný parametr.
Následující stránky obsahují specifikace objektů posílaných v požadavcích a odpovědích.
- Klient se připojí k serveru pomocí protokolu TCP.
- Klient pošle handshake.
- Klient vyčká na odpověď na handshake.
- Po úspěšném přijetí odpovědi klientem je navázána komunikace.
- Klient pak typicky autentizuje uživatele.
- Probíhá komunikace.
- Klient se odpojí, nebo je odpojen serverem.
Konkrétních zpráv je mnoho, proto jsou rozdělené do více stránek podle typu klienta:
- Obecné zprávy pro všechny
- Zprávy pro reliéf
- Zprávy pro regulátor
- Zprávy pro RCS daemon
- Zprávy pro staniční hlášení
- Zprávy pro AC
-
v1.0
: první verze protokolu -
v1.1
: změněn formát souprav v trati (doplněna možnost posílat barvy)
-
v1.0
: první verze protokolu -
v1.1
: změněn význam kliků panelu