next up previous
Next: Events auf der Kernel-Ebene Up: Übersicht: Das Event-System im Previous: Übersicht: Das Event-System im

Events auf der Sim-Ebene

Die Events auf Simulationsebene werden in Sim::Insect definiert und sind für die Übermittlung von Ereignissen vom Server zum Client zuständig.
Es wird dabei wird zunächst unterschieden zwischen




 
Abbildung 1: Struktur der Events
\begin{figure}
\begin{center}
\epsfbox{event.eps}\end{center}\end{figure}

Erstere sind für Ergebnisse von Aktionen zuständig, werden allerdings von der momentanen Implementation nicht unterstützt, letztere sind für die Übermittlung von Beobachtungen des zugehörigen Insektes zuständig. Die ObservationEvents lassen sich noch einmal unterteilen in

Erstere stellen dabei Beobachtungen am eigenen Objekt und deren Attribute sowie an fremden Objekten dar. Dagegen hat der TimeoutEvent (im Code als dummy bezeichnet) eine Sonderrolle: Er stellt eine Art Zeitstempel dar, der einmal pro Durchlauf der start()-Schleife (durch Aufruf von Observer::check()) an die Event-Liste angehängt wird, so daß ein Client z.B. entscheiden kann, nur die Events aus einem bestimmten Zeitraum zu verarbeiten.

Zur besseren Übersicht hier noch die Definitionen der Events in Sim.idl:
    union Event switch (EventType) {
      case aDoEvent:            DoEvent Do;
      case aObservationEvent:   ObservationEvent Observation;
    };

    enum EventType { aDoEvent, aObservationEvent };

    struct DoEvent {
      DoEventKind   theKind;
      DoEventResult theResult;
    };

    enum DoEventKind { Move, Fight, Eat, Hold };
    enum DoEventResult { Done, Failed }; 

    union ObservationEvent switch(ObservationEventKind) {
      case Thing:   ObservationThingEvent Thing;
      case Attr:    ObservationAttrEvent Attr;
      case Timeout: boolean dummy;
    };

    enum ObservationEventKind { Thing, Attr, Timeout };

    struct ObservationThingEvent {
      ThingIndex Thing;
      ThingType  Type;
      Position   Pos;
      Volume     Vol;
    };

    struct ObservationAttrEvent {
      AttrType  Attr;
      AttrValue Value;
    };


Tim Paehler
1998-05-12