next up previous
Up: No Title Previous: Des processus et des

Graphismes et communications

Dans cet exercice nous souhaitons réaliser un ``mini-serveur graphique'' qui recevra ses requêtes par le media d'un canal (voir le module Event).

Le langage compris par le serveur est décrit par un petit langage dont la syntaxe abstraite est :

type pixel = int * int 

type graphical_query =
    Clear
  | Point of color * pixel 
  | Line of color * pixel * pixel 
  | Polyline of color * pixel list 
  | Polygone of color * pixel list 
  | Polyfill of color * pixel list 
  | Circle of color * pixel * int 
  | Text of color * pixel * string 
  | Function of (unit -> unit)

1.
Quel est le problème que l'on peut rencontrer en faisant du graphisme de façon concurrente au moyen du module Graphics ?

2.
Écrire une classe graph_server prenant comme arguments les dimensions d'une fenêtre et possédant comme méthodes publiques exit : unit et get_channel : graphical_query Event.channel. À l'instanciation de cette classe, une fenêtre aux bonnes dimensions devra apparaître et un canal permettant le passage de valeurs de type graphical_query sera ouvert. En outre, l'émission sur ce canal d'une requête graphique devra être traitée de manière synchrone par le serveur. La méthode exit ferme la fenêtre.

3.
Écrire la classe graph_client prenant un serveur en argument et possédant la méthode send_query : graphical_query -> unit. À l'application de cette méthode, la requête est émise sur le canal ouvert par le serveur.

4.
Écrire les classes enhanced_graph_server et enhanced_graph_client qui autorisent en plus réception et émission de requêtes asynchrones.



Emmanuel CHAILLOUX
1998-11-15