Komunikácia agenta s test frameworkom

Z RoboCupTP wiki

Prejsť na: navigácia, hľadanie

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.

Osobné nástroje