View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide

Comment coder un service ?

Les services UbiquiTalk doivent être codés sur l’hôte fournisseur uniquement. En effet, le client téléchargera une classe qui lui est nécessaire afin de pouvoir exécuter le service.

Trois étapes sont nécessaire pour coder un service:
  1. Implanter les classes nécessaires au client
  2. Implanter les classes support au service
  3. Implanter la classe façade du service

Dans ce qui suit, nous présentons pas à pas l'implantation d'un service qui permet au client d’afficher le message 'Hello World!' sur le Transcript de l’image qui contient le service.

Implanter les classes nécessaires au client

Pour coder un service, on va tout d’abord implanter les classe(s) nécessaire(s) au client. Ces classes doivent être placée dans un paquetage dédié ou une catégorie de classes dédiée. Pour notre l’exemple il y a une unique classe qui sera placée dans la catégorie 'UTHelloWorld-Client'.

Object subclass: #UTHelloClient
InstanceVariableNames: ‘’
ClassVariableNames: ‘’
PoolDictionaries: ‘’
Category: ‘UTHelloWorld-Client’


Cette classe contient une méthode de classe qui sera le point d’entrée pour le service.

 
printHelloOnService: helloService
 helloService printHello


Implanter les classes support au service

On doit ensuite implanter les classes supports du service. Pour le service Hello World, nous utilisons simplement le Transcript. Il n'y a donc aucune classe à implanter. La classe support étant déjà disponible (TranscriptStream).


Implanter la classe façade du service

Maintenant, nous implantons la classe qui donne accès aux fonctionnalité du service. Celle-ci doit hériter de la classe UTService et implante les méthodes nécessaires à l’utilisation de celui-ci.

La classe du service

 
UTService subclass: #UTHelloService
instanceVariableNames: ‘’
classVariableNames: ‘’
poolDictionaries: ‘’
category: ‘UTHelloWorld-Service’ 


Méthode réalisant le service

 
printHello
 Transcript cr; show: ‘Hello World !’


Méthode de déscription du service

 
defaultName
 ^‘Hello World service’

defaultDescription
 ^'Prints ''Hello World!'' on a remote Transcript'


Méthode de gestion du client

 
clientPackageNameFor: anUTHost 
 "Return the name of the category or Monticello package which contains client code"
 ^‘UTHelloWorld-Client’

hasClientCodeFor: aHost
 "Boolean. Possess client code"
 ^true

clientStartupReceiverFor: aHost
 "Indicate the name of remote client object"
 ^UTRemoteGlobalObject named: UTHelloClient

clientStartupSelectorFor: aHost
 "Return the name of class method to execute at client side"
 ^#printHelloOnService:

clientStartupArgumentsFor: aHost
 "Return arguments used by this method contained in an Array"
 ^{self}


La classe UTService implémente deux méthodes que les sous-classes peuvent optionnellement redéfinir : startUp et shutDown. Ces méthodes sont exécutées à chaque lancement et arrêt d’UbiquiTalk. Certains services peuvent en avoir besoin afin de réaliser des tâches d'initialisation et de nettoyage. Par exemple un service de conférence chat peut avoir de vider sa liste de participants distants à chaque arrêt d'UbiquiTalk, pour évider des erreurs d'exécution dues à des références sur des participants distants inaccessibles.

UTService subclass: #UTConference
..."le reste de la définition de la classe"
 
UTConference>>shutDown
 "Clear the chatter list when the host is shut down. Done in order to avoid failures when disconnection occurs"
 chatters := Set new.