Komunikácia agenta s test frameworkom
Z RoboCupTP wiki
Späť na Návod
Obsah |
Základy
Test framework beží ako server (štandardne na porte 8000), ku ktorému sa majú pripájať agenti. Na tomto spojení získava test framework od agenta správy o jeho stave, toto spojenie teda slúži ako akýsi monitor agenta. Toto slovné spojenie budem používať pre označenie tohto spojenia. Táto komunikácia je jednosmerná, tzn. agent správy len odosiela a test framework ich len prijíma.
Ďalšie spojenie medzi agentom a serverom je (nepovinný) TFTP server bežiaci na strane agenta. K tomuto sa pripája test framework a využíva ho na ovládanie agenta. Ak test framework pošle agentovi cez toto spojenie súbor s názvom ruby.exec
, agent vykoná ruby kód obsiahnutý v tomto súbore.
Monitor agenta
Server (TestFramework)
Tento server je implementovaný triedou AgentMonitor
(podobne ako u monitora robocup serveru týchto inštancií môže byť viacero, no v lokálnej implementácii sa používa vždu len jedna), ktorá sa stará o prijímanie nových spojení od agentov. Každé jedno takéto spojenie je reprezentované triedou AgentMonitorThread
, ktorá má na starosti spracovanie správ prichádzajúcich od agenta pomocou triedy AgentMonitorMessage
. V súčasnosti môžu existovať 4 rôzne typy takýchto správ:
-
INIT
- posiela agent pri pripojení, obsahuje jeho číslo, názov tímu a stranu na ktorej hrá, takisto či má hráč zapnutý TFTP server a na ktorom porte -
DESTROY
- posiela agent pri odpojení -
HIGHSKILL
- informuje test framework o začatí/skončení high skillu, obsahuje meno high skillu a čas kedy k akcii došlo -
WORLDMODEL
- posiela model sveta agenta do test frameworku
Okrem tohoto "automatického" spracovania príchodzých správ ich môžu ďalej odchytávať a spracovávať iné triedy pomocou listeneru IAgentMonitorListener
, ktorý sa registruje v triede AgentMonitor
jednou z metód setMessageListener
, buď len pre konkrétneho agenta, alebo pre všetkých. Tiež je možné registrovať len určité typy správ kombinované pomocou bitového OR operátora.
Klient (Jim)
Na komunikáciu s test frameworkom slúži v agentovi trieda TestFrameworkCommunication
. V súčasnosti je implementovaná tak, že sa neinicializuje niekde na začiatku, ale až pri odoslaní prvej správy k test frameworku. Keďže test framework v prvej správe od agenta potrebuje mať uvedenú stranu na ktorej agent hrá, môže sa komunikácia začať až po tom ako agent dostal túto informáciu zo servera. To je uložené v AgentInfo.hasAssignedSide
. Pri volaní niektorej z komunikačných metód v triede TestFrameworkCommunication
skôr, agent túto komunikáciu jednoducho ignoruje.
Posielané správy sú reprezentované triedou Message
. Typy správ sú rovnaké aké boli uvedené v predchádzajúcej sekcii.
TFTP - vykonávanie ruby príkazov zadávaných test frameworkom na strane agenta
TFTP server (Jim)
Celá logika, vrátanie špeciálneho spracovania súboru s názvom ruby.exec
je implementovaná v triede TFTPServer
. Jednoducho sa z kódu vytvorí Script
objekt, ktorý sa vykoná.
TFTP klient (TestFramework)
Používané ruby príkazy sa nachádzajú v metódach ktorých názov začína na invoke
v triede AgentJim
.