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.
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 porteDESTROY
- 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šloWORLDMODEL
- 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.
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.
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á.
Používané ruby príkazy sa nachádzajú v metódach ktorých názov začína na invoke
v triede AgentJim''
.