next up previous
Next: Ablauf des Fressens auf Up: Übersicht: Ablauf von Bewegung Previous: Das Insekt im Simulator

Ablauf der Insektenbewegung auf dem Server

Betrachten wir nun, was passiert, wenn man von einem Insekten-Client aus eine Bewegung des zugehörigen Insekts im Kernel veranlassen möchte, also z.B. im InsectTool eine neue Position eingibt und diese per 'doMove'-Button abschickt:

Zunächst wird vom Client über das Sim-Interface die Funktion doMove() aufgerufen. Diese wird von der C++-Klasse KerInsectImpl auf Kernel-Ebene implementiert. Die Funktion doMove() errechnet nun aus den Zielkoordinaten und den gegenwärtigen Koordinaten die zu bewältigende Distanz und teilt dann unter Berücksichtigung der Geschwindigkeit diese Strecke in mehrere gleichgroße Stücke auf.

 
Abbildung 2: Ablauf der Bewegung eines Insekts im Simulator
\begin{figure}\begin{center}
\vspace{0.3cm}
\epsfbox{call.eps}\\\end{center}\end{figure}


 
Abbildung 3: Ablauf der Bewegung im Kernel
\begin{figure}\begin{center}
\vspace{0.3cm}
\epsfbox{call2.eps}\\\end{center}\end{figure}


Die Streckenpunkte werden daraufhin über eine PositionList, einer Liste aus x-y-Koordinatenpaaren an die physikalische Ebene übergeben. Dort läuft die eigentliche Bewegung des 'Dings` dann zunächst unabhängig an. Um die Bewegung jedoch weiter auf Kernel-Ebene zu überwachen, wird im Hilfsobjekt Mover die Anzahl der Schritte und die zu bewältigende Distanz gespeichert. Die Überwachung wird dabei in der von der Methode start() durchlaufenen Endlosschleife (quasi der 'Herzschlag' des Insekts) durch den Aufruf der Funktion processMove() vorgenommen. Diese Methode befragt ihrerseits den Mover, ob die gewünschte Bewegung mit den vorhandenen Energieressourcen vereinbar ist und inwieweit diese durch die Bewegung reduziert werden. Sind nicht mehr genügend Ressourcen vorhanden, wird der physikalischen Ebene ein Signal zum Stoppen der Bewegung übergeben, und das Ziel im Mover gelöscht.

Problematisch könnte bei dieser Form der Abarbeitung die direkte Verbindung zwischen Sim::Insect::doMove() und Physical::Thing::doMove() sein, die bewirkt, daß ein wildgewordener Insekten-Client, durch endloses Aufrufen von Bewegungsbefehlen in der Lage ist, den Ablauf auf der physikalischen Ebene auszubremsen.


next up previous
Next: Ablauf des Fressens auf Up: Übersicht: Ablauf von Bewegung Previous: Das Insekt im Simulator
Tim Paehler
1998-05-12