c't Projekte - c't-Bot und c't-Sim - Mailinglisten
Absender: Timo Sandmann
Datum: Di, 10.03.2009 16:37:28
In-reply-to:
<096FD558C4D20046A1BABE72DFF0C6C339FF703DD0@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References:
<C5322C42-45F3-424E-8213-623D98805E87@xxxxxxxxxxxxxxx> <E5C14985-DDDC-400F-9949-72AE4A3F9DCF@xxxxxxxxxxxxxxx> <096FD558C4D20046A1BABE72DFF0C6C339FF703DD0@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Frank, Am 09.03.2009 um 11:23 schrieb Menzel, Frank IT-OO4:
Aber irgendwie fehlt mir hier noch eine allgemeingültige, von einem beliebigen Verhalten aufrufbare, Kommunikationsroutine.
na ja was heißt von beliebigen Verhalten? Letztlich braucht man für jedes Verhalten irgendeinen speziellen Code, der die Daten dort speichert, wo das jeweilige Verhalten sie braucht / erwartet.
Für den payload-Test ist ja ein eigener Buffer definiert und eine Callbackroutine, die nach dem Empfang des Buffers im Empfangsbot aufgerufen wird. Mir ist hier aber noch zu viel per Define zu programmieren in der bot-2-bot.h bzw. bot-2-bot.c, je nachdem was anwendungsbezogen passieren soll.
Die #defines sind ja nur dazu da, um Tipparbeit zu sparen und es übersichtlicher aussehen zu lassen.
Auch geht es ja noch nicht, einfach ein Zielverhalten aufzurufen, ohne wieder weitere Defines für den Anwendungsfall reinzuprogrammieren. Man könnte doch da erlauben, ein beliebiges remotecall-Verhalten, die sich ja schon in einer extra Liste befinden, aufzurufen.
Ja natürlich, dazu muss nach dem Datenempfang auf dem Zielbot nur die Funktion bot_remotecall_from_command(char * data) aufgerufen werden. Allerdings haben die Remotecalls derzeit die Einschränkung, dass man nur dann einen starten kann, wenn nicht bereits ein anderes Verhalten per Remotecall gestartet wurde. Der Sim fängt das automatisch ab, aber ein anderer Bot weiß natürlich nicht, ob der Remotecall-Dienst "frei" ist oder nicht. Eventuell braucht man hier noch etwas mehr Fehlerbehandlung / Rückmeldungen.
Also ich würde mir da eine Routine vorstellen, die folgende Parameter hat:To -> Adresse Zielbot Datenbereich -> per Payload übertragen wenn gefüllt, sonst eben nichtZielverhalten -> Auf Remotebot zu startendes Zielverhalten nach Payload des Datenbereiches
Den letzten Satz verstehe ich irgendwie rein sprachlich schon nicht. Aber es gibt ja die Funktion int8_t bot_2_bot_send_payload_request(uint8_t to, uint8_t type, void * data, int16_t size), womit "To" und "Datenbereich" schon einmal direkt abgehandelt sind ("to" und "data"). "Zielverhalten" muss man halt irgendwie mit "type" übertragen, denn je nachdem, welches Verhalten die Daten bekommen soll, muss auch der Speicherplatz, wo die Daten abgelegt werden, unterschieden werden. Ich verstehe nicht so richtig, was du meinst, könntest du vielleicht mal ein Beispiel anhand eines konkreten Verhaltens machen?
Oder nur für Payload-Übertragung ohne Zielverhalten.
Ja aber man muss ja irgendwie angeben, wo die Daten hin sollen, oder was meinst du?
Gruß, Timo -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (Darwin) iEYEARECAAYFAkm2iTYACgkQDH/BX4067fJr3ACffBpgyNMDopWxswEN9BUHNGEV yZ8AnA7QlkBKf/S0dZaqWvbvJ0g57InA =XZUs -----END PGP SIGNATURE-----