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

SS 99 || Ferienprojekt zu Allgemeine Informatik II || Puzzle Library

MODULE PuzzleClient


MODULE PuzzleClient;

   IMPORT Conclusions, Errors, InetTCP, Iterators, Networks,
      Players := PuzzlePlayers, RelatedEvents, RemoteChessClocks,
      RemoteObjects, RemotePuzzlePlayers, Resources, RobustObjects, Strings,
      UnixNames;

   CONST
      dir = "/etc/puzzle/players";
   VAR
      portsOpened: BOOLEAN;

   TYPE
      ListOfPlayers = POINTER TO ListOfPlayersRec;
      ListOfPlayersRec =
	 RECORD
	    player: Players.Player;
	    next: ListOfPlayers;
	 END;
   VAR
      exported: ListOfPlayers;

   PROCEDURE OpenAllKindsOfPorts;
      VAR
	 network: Networks.Network;
	 it: Iterators.Iterator;
	 port: Networks.Socket;
	 address: Networks.Address;
	 errors: RelatedEvents.Object;
   BEGIN
      NEW(errors); RelatedEvents.QueueEvents(errors);
      Networks.GetNetworks(it);
      WHILE Iterators.Get(it, network) DO
	 IF ~Networks.CreateSomeSocket(port, network, address, errors) OR
	       ~RemoteObjects.AddPort(port, address, errors) THEN
	    Conclusions.Conclude(errors, Errors.error, "open ports");
	 END;
      END;
      portsOpened := TRUE;
   END OpenAllKindsOfPorts;

   PROCEDURE Export(player: Players.Player; name: ARRAY OF CHAR);
      VAR
	 path: ARRAY 512 OF CHAR;
	 errors: RelatedEvents.Object;
	 element: ListOfPlayers;
   BEGIN
      IF ~portsOpened THEN OpenAllKindsOfPorts END;
      IF name[0] = "/" THEN
	 COPY(name, path);
      ELSE
	 path := dir; Strings.Concatenate(path, "/");
	 Strings.Concatenate(path, name);
      END;
      NEW(errors); RelatedEvents.QueueEvents(errors);
      IF ~RobustObjects.Export(player, NIL, path, NIL, errors) THEN
	 Conclusions.Conclude(errors, Errors.fatal, name);
      END;
      NEW(element); element.player := player;
      element.next := exported; exported := element;
   END Export;

BEGIN
   portsOpened := FALSE; exported := NIL;
END PuzzleClient.

SS 99 || Ferienprojekt zu Allgemeine Informatik II || Puzzle Library

Andreas Borchert, 26. Juli 1999