Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, SAI

WS 2000/01 || Entwicklung objekt-orientierter Bibliotheken || Beispiele || Rooms

DEFINITION Rooms


DEFINITION Rooms;

   IMPORT ConstStrings, Iterators, Objects, PersistentDisciplines,
      Shards;

   TYPE
      Object = POINTER TO ObjectRec;
      ObjectRec = RECORD (PersistentDisciplines.ObjectRec) END;
      Room = POINTER TO RoomRec;
      RoomRec = RECORD (ObjectRec) END;
      Door = POINTER TO DoorRec;
      DoorRec = RECORD (ObjectRec) END;

      CheckAuthProc = PROCEDURE(object: Object;
				auth: Shards.Lid) : BOOLEAN;
      GetNameProc = PROCEDURE(object: Object;
			      VAR name: ConstStrings.String);
      MessageProc = PROCEDURE(from, to: Object;
			      msg: ConstStrings.String);
      KickProc = PROCEDURE(object: Object; room: Room;
			   auth: Shards.Lid) : BOOLEAN;
      EnterProc = PROCEDURE(r: Room; object: Object;
			    auth: Shards.Lid) : BOOLEAN;
      LeaveProc = PROCEDURE(r: Room; object: Object;
			    auth: Shards.Lid) : BOOLEAN;
      GetDoorsProc = PROCEDURE(r: Room;
			       VAR it: Iterators.Iterator);
      GetObjectsProc = PROCEDURE(r: Room;
				 VAR it: Iterators.Iterator);
      GetDoorProc = PROCEDURE(r: Room; name: ConstStrings.String;
			      VAR door: Door);
      GetObjectProc = PROCEDURE(r: Room; name: ConstStrings.String;
			        VAR object: Object);
      BroadcastProc = PROCEDURE(from: Object; to: Room;
				msg: ConstStrings.String);
      NextRoomProc = PROCEDURE(door: Door; object: Object;
			       auth: Shards.Lid;
			       VAR r: Room) : BOOLEAN;

      ObjectInterface = POINTER TO ObjectInterfaceRec;
      ObjectInterfaceRec =
	 RECORD
	    (Objects.ObjectRec)
	    checkAuth: CheckAuthProc;
	    getName: GetNameProc;
	    message: MessageProc;
	    kick: KickProc;
	 END;
      RoomInterface = POINTER TO RoomInterfaceRec;
      RoomInterfaceRec =
	 RECORD
	    (ObjectInterfaceRec)
	    enter: EnterProc;
	    leave: LeaveProc;
	    getDoors: GetDoorsProc;
	    getObjects: GetObjectsProc;
	    getDoor: GetDoorProc;
	    getObject: GetObjectProc;
	    broadcast: BroadcastProc;
	 END;
      DoorInterface = POINTER TO DoorInterfaceRec;
      DoorInterfaceRec =
	 RECORD
	    (ObjectInterfaceRec)
	    nextRoom: NextRoomProc;
	 END;

   PROCEDURE InitObject(object: Object; if: ObjectInterface);
   PROCEDURE InitRoom(room: Room; if: RoomInterface);
   PROCEDURE InitDoor(door: Door; if: DoorInterface);

   PROCEDURE CheckAuth(object: Object; auth: Shards.Lid) : BOOLEAN;
   PROCEDURE Kick(object: Object; r: Room; auth: Shards.Lid) : BOOLEAN;

   PROCEDURE Enter(r: Room; object: Object;
		   auth: Shards.Lid) : BOOLEAN;
   PROCEDURE Leave(r: Room; object: Object;
		   auth: Shards.Lid) : BOOLEAN;

   PROCEDURE GetDoors(r: Room; VAR it: Iterators.Iterator);
   PROCEDURE GetObjects(r: Room; VAR it: Iterators.Iterator);
   PROCEDURE GetDoor(r: Room; name: ConstStrings.String;
		     VAR door: Door);
   PROCEDURE GetObject(r: Room; name: ConstStrings.String;
		       VAR object: Object);
   PROCEDURE GetName(object: Object; VAR name: ConstStrings.String);

   PROCEDURE NextRoom(door: Door; object: Object;
		      auth: Shards.Lid; VAR r: Room) : BOOLEAN;

   PROCEDURE Message(from, to: Object; msg: ConstStrings.String);
   PROCEDURE Broadcast(from: Object; to: Room;
		       msg: ConstStrings.String);

END Rooms.

WS 2000/01 || Entwicklung objekt-orientierter Bibliotheken || Beispiele || Rooms

Andreas Borchert, 29. Januar 2001