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