IFT1025 Automne 2009 Devoir 3

Documents pareils
Network musical jammin

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Bienvenue à l historien virtuel 2.0

Partage avec collaboration Important : Ce type de partage exige la connexion à un serveur CmapServer.

Mini-projet systèmes & réseau serveur de «tchatche»

Interfaces graphiques avec l API Swing

Remote Method Invocation Les classes implémentant Serializable

Guide de présentation du courrier électronique. Microsoft Outlook Préparé par : Patrick Kenny

Système de messagerie vocale Cisco Unity Express 7.0 Guide de l utilisateur Fonctionnalités avancées

Développement Logiciel

Manuel d utilisation de la messagerie.

Découvrir la messagerie électronique et communiquer entre collègues. Entrer dans le programme Microsoft Outlook Web Access

Création d un service web avec NetBeans 5.5 et SJAS 9

DUT Informatique Module Système S4 C Département Informatique 2009 / Travaux Pratiques n o 5 : Sockets Stream

Ouvrez un compte Hotmail pour communiquer

F O R M A T I O N S LOTUS NOTES. 8.5 Utilisateurs rue de la Bôle. E U R L. a u c a p i t a l d e

Module Communication - Messagerie V6. Infostance. Messagerie

MO-Call pour les Ordinateurs. Guide de l utilisateur

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Un ordonnanceur stupide

Utilisation du nouveau webmail académique

Tutorial Terminal Server sous

Ouvrir le compte UQÀM

Ressources informatiques Guide pour les étudiants du Lycée Jean-Piaget Version

< Atelier 1 /> Démarrer une application web

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Manuel d utilisation du web mail Zimbra 7.1

SOMMAIRE. 1. Connexion à la messagerie Zimbra Pré-requis Ecran de connexion à la messagerie 4

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

Guide de l utilisateur Mikogo Version Windows

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Synchro et Threads Java TM

Webmail Login avec autre Browser qu IE INDEX

À propos du Guide de l'utilisateur final de VMware Workspace Portal

TBI-DIRECT. Bridgit. Pour le partage de votre bureau. Écrit par : TBI Direct.

CTIconnect PRO. Guide Rapide

Afin d accéder à votre messagerie personnelle, vous devez vous identifier par votre adresse mail et votre mot de passe :

Thunderbird est facilement téléchargeable depuis le site officiel

Guide plateforme FOAD ESJ Lille

ANTIDOTE 8 INSTALLATION RÉSEAU WINDOWS

Guide de rapports ADT Sélecte

Installation et utilisation du client FirstClass 11

Guide de l utilisateur. Synchronisation de l Active Directory

Aide Webmail. L environnement de RoundCube est très intuitif et fonctionne comme la plupart des logiciels de messagerie traditionnels.

Envoyer et recevoir son courrier

DE CENTRALISE FACTURE CRE ATION

Introduction : les processus. Introduction : les threads. Plan

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Remote Method Invocation (RMI)

Guide d utilisation pour W.access - Client

Premiers pas avec NetSupport SCHOOL

Your Detecting Connection. Manuel de l utilisateur. support@xchange2.net

Cisco Certified Network Associate

Configurer et sécuriser son réseau sans fil domestique

Table des matières...2 Introduction...4 Terminologie...4

Calcul Parallèle. Cours 5 - JAVA RMI

Gestion distribuée (par sockets) de banque en Java

Cours de Systèmes d Exploitation

TP1 : Initiation à Java et Eclipse

Manuel d utilisation de V3D Events - Visiteurs

Guide d utilisation. Version 1.1

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Lutter contre les virus et les attaques... 15

Gestionnaire d'appareil à distance (GAD) de Bell Foire aux questions

Guide d utilisation du système rapport en ligne de la famille de la CMS

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Je me familiarise avec le courrier électronique

//////////////////////////////////////////////////////////////////// Administration bases de données

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Threads. Threads. USTL routier 1

Manuel du client de bureau distant de KDE

Prestation électronique de service pour la transmission d un bilan de phosphore

Comment utiliser RoundCube?

Manuel d utilisation

cbox VOS FICHIERS DEVIENNENT MOBILES! POUR CLIENT MAC OS X MANUEL D UTILISATION

Travaux pratiques Bureau à distance et assistance à distance dans Windows 7

BR-Docs guide d applications mobile Android

Manuel d utilisation de V3D Events - Visiteurs. We bring people closer

Contenu Windows 8 MODULE 1 AVANT-PROPOS MODULE 2 INTRODUCTION À WINDOWS 8 MODULE 4 APPLICATIONS WINDOWS 8 PARTIE 1 MODULE 3 PARAMÈTRES DE WINDOWS 8

Informations sur l utilisation du webmail du CNRS. Webmail du CNRS. Manuel Utilisateur

Nettoyer l'historique et le cache DNS de votre navigateur

Utilisation du client de messagerie Thunderbird

Accès au Serveur de PAIE «SPV» par INTERNET Paramétrage du poste de travail «Windows»

GUIDE MEMBRE ESPACE COLLABORATIF. Février 2012

Construire des plug-ins pour SAS Management Console SAS 9.1

Auto-évaluation Programmation en Java

DOCUMENT D ACCOMPAGNEMENT POUR L INSTALLATION DU LOGICIEL ESTIMACTION

Swisscom Webmail - mode d emploi

Documentation Honolulu 14 (1)

Plate-forme de tests des fichiers XML virements SEPA et prélèvements SEPA. Guide d'utilisation

Manuel d utilisateur BilanKine Version 1.5

REUNION INFORMATIQUE 15/09/12 Utilisation Messagerie «Webmail 2» I ) Préambule : Pourquoi l utilisation d une messagerie commune?

LISTES DE DISTRIBUTION GÉRÉES PAR SYMPA DOCUMENT EXPLICATIF DE L'INTERFACE WEB À L'INTENTION DES ABONNÉS

Gestion des réunions dans Outlook 2007

SERVICE CONTACT INSTANTANÉ GUIDE D UTILISATEUR

UTILISER LA MESSAGERIE

Manuel d utilisation de Form@Greta

Utiliser le portail d accès distant Pour les personnels de l université LYON1

Initiation à Windows 8

TP1. Outils Java Eléments de correction

Transcription:

IFT1025 Automne 2009 Devoir 3 Miklós Csűrös 5 novembre 2009 À remettre avant 23 :59 mercredi le 18 novembre par courrier éléctronique. Ce travail est destiné à des équipes de deux ou trois étudiants. Le but du TP est de se familiariser avec la conception d un interface graphique, ainsi qu avec l interaction de procéssus légers dans une application clientserveur. 1 Application clavardage Virginie Clavardoire avec Alice, Bob et Virginie Clavardoire avec Paul et Virginie geré par geré par Serveur Alice Paul Bob Dans ce TP, vous avez à implanter une application de clavardage (chat) pour établir des discussions entre plusieurs usagers. Une «salle» de discussion s appelle un clavardoir (chat room). On peut avoir plusieurs participants dans le même clavardoir : tout le monde envoie des messages à tous les participants. L implantation simule un serveur et les clients à l aide des Threads : dans le prochain TP, on ajoutera la communication propre sur un réseau. 2 Connexions et messages Le clavardage s établit par connexions entre le serveur et les clients individuels. Une connexion comprend deux canaux de communication unidirectionnelle : un canal transmet les messages du serveur au client et l autre transmet les messages du client au serveur. Un client a un identificateur (id) et un nom ou pseudonyme (nom). Le serveur stocke l identificateur de chaque client, mais ne le transmet pas parmi eux. Le nom d un usager est connu par tout le monde. Il est utilisé pour inviter un autre usager, ou pour afficher l origine d un message pendant une session de clavardage. Un message (classe Message) est composé de quatre champs : type de message (valeurs possibles DISCONNECT, INVITE, CHAT, ERROR), identificateur de clavardoir (String), identité du client (String), et d un texte. Quand le serveur reçoit un message du client u, le troisième champ du message est parfois l identificateur du client. Dans les messages transmis par le serveur, le troisième champ est toujours un pseudonyme d usager. Les messages suivants seront envoyés. 1

Code Action Message Source Destinataire(s) Nc Requête de nouveau clavardoir avec usager v (INVITE, null, v.nom, null) client u serveur Ns OK : Établissement de clavardoir c avec v, demandé par client u (INVITE, c, u.nom, null) serveur clients u, v Cc Envoi de message au clavardoir c (CHAT, c, u.id, m) client u serveur Cs Transmission de message en clavardoir c (CHAT, c, u.nom, m) serveur participants de c Qc Usager u quitte clavardoir c (DISCONNECT, c, u.id, null) client u serveur Qs Notification de départure en clavardoir c (DISCONNECT, c, u.nom, null) serveur participants de c Dc Déconnexion du client u (DISCONNECT, null, u.id, null) client u serveur Qs Notification de départure (DISCONNECT, c, u.nom, null) serveur chaque clavardoir c du client u avec u E1 Erreur : usager v non-existant (réponse à Nc) (ERROR, null, v.nom, null) serveur client v E2 Erreur : clavardoire c non-existant (réponse à Cc, Qc) (ERROR, c, null, null) serveur client E3 Erreur : client c ne participe pas à c (réponse à Cc, Qc) (ERROR, c, u.nom, null) serveur client u Dans cette première version de l application, on a un modèle simple pour simuler la communication entre des ordinateurs différents. En particulier, une connexion est implanté en utilisant deux BlockingQueues pour assurer la synchronisation entre des threads du serveur et des clients sur le même ordinateur. La classe Connection implante les méthodes suivantes. sendmessagetoserver(message msg) sendmessagetoclient(message msg) Message getmessagefromserver() Message getmessagefromclient() 3 Serveur Le serveur doit maintenir une connexion à chaque client. Le serveur reçoit des messages pour établir des clavardoirs, pour connecter les usagers aux clavardoirs ou les y déconnecter, et pour transmettre du texte d un usager à l autre. Au côté serveur, un procéssus léger est dédié à chaque client pour écouter ses messages. Le procéssus est lancé à l aide d un objet ClientAssistant qui implante l interface Runnable. Un tel objet est instancié avec la connexion avec un client. La méthode run() obsèrve la connexion dans une boucle infinie. 2

public class ClientAssistant implements Runnable... public void run() while (true) Message msg = connexion.getmessagefromclient(); if (msg!=null) // gestion de message sleep(200l); // gestion d interruptions Synchronisation des procéssus. Au serveur, il y a des ressources partagées parmi les procéssus des ClientAssistants, comme par exemple le registre de clients, et les associations entre les connexions, identificateurs de clients, et instances de ClientAssistant. Il est donc important d assurer l exclusion mutuelle quand ces données sont accédées : utilisez la technique de verrouillage avec synchronized. En choisissant vos structures de données, notez que les méthodes des classes Vector (fontionne comme ArrayList) et Hashtable sont synchronisées automatiquement. 4 Client Le client participe au clavardage par un interface graphique. Un procéssus léger est dédié à l écoute de messages arrivés du serveur : utilisez une extension de SwingWorker. La méthode doinbackground() obsèrve une connexion dans une boucle infinie. Les messages arrivés sont passés au procéssus d événements (Event Dispatch Thread) par publish, où la méthode process performe la mise à jour de l interface graphique. class... extends SwingWorker<Void,Message> public Void doinbackground() while(true) Message msg = connexion.getmessagefromserver(); if (msg!= null) publish(msg); sleep(200l); // gestion d interruption: iscancelled() public void process(list<message> messages_arrives) // mise à jour du GUI 3

Synchronisation des procéssus. Chez le client, la synchronisation de trois procéssus (main, EDT [Event Dispatch Thread], et SwingWorker) ne pose pas trop de problèmes. Avec l usage de publish-process, le GUI n est jamais accédé à partir d un autre procéssus que l EDT, mais il peut être utile de savoir que la méthode append de JTextArea (utilisé pour afficher les messages dans le clavardoire) peut être appellée de n importe quel thread. 5 Scénarios Connexion d un client. Une nouvelle connexion est établie dans la séquence suivante. 1. Appel de la méthode (définie dans la classe Server) public synchronized Connection registerclient(client client). (Dans une version ultérieure, on ajoutera l établissement de connexion sur un réseau et pas entre threads... ) 2. La méthode registerclient crée un objet ClientAssistant et lance un nouveau procéssus léger exécutant la boucle de son run(). On doit aussi stocker l assistant associé avec l identificateur du client (utiliser Hashtable<String,ClientAssistant>), et l association du nom avec l identificateur (utiliser Hashtable<String,String>). Établissement d un clavardoir. Un clavardoir est établi quand le ClientAssistant reçoit un message (INVITE, v.nom, null, null) du client u. S il y a un client v, alors on détermine son objet ClientAssistant. Un clavardoire est créé avec les deux connexions (des deux ClientAssistants). Il faut envoyer un reçu aux deux clients : (INVITE, u.nom, c, null), où c est l identificateur du clavardoir (choisi par le serveur). Les ClientAssistants doivent stocker les clavardoirs actifs, ainsi que leurs identificateurs (utiliser Hashtable<String,Chat>). Si le nom v n est pas connu, alors il faut envoyer un message d erreur au client u. 1. Usager u demande un nouveau clavardoir en invitant usager v, à l aide de l interface graphique. 2. Événement capturé (actionperformed) : envoi de message Nc. 3a. Message arrive au serveur : ClientAssistant pour u identifie ClientAssistant pour v et envoie les messages Ns. 3b. Message arrive au serveur : ClientAssistant pour u envoie le message d erreur E1. 4a. Message arrive au client u : SwingWorker utilise publish() 4b. En process() chez client u : nouvelle fenêtre (si Ns), ou message d erreur (si E1). 5a. Message Ns arrive au client v : SwingWorker utilise publish() 5b. En process() chez client u : nouvelle fenêtre Joindre un clavardoir. Dans cette implantation, il n est pas possible de joindre un clavardoir après son établisssement. Comme un développement futur, on prévoit la participation d autres usagers. 4

Quitter un clavardoir. Le client u peut quitter le clavardoir en envoyant le message (DISCONNECT, u.id, c, null). Quand ce message est reçu par le ClientAssistant, il doit enlever cette connexion du clavardoire c, et envoyer un message (DISCONNECT, u.nom, c, null) à tous les autres usagers (dans cette version, un autre usager au plus) qui restent. Déconnexion d un usager. Le client u peut se déconnecter du serveur en envoyant le message (DISCONNECT, u.id, null, null) : il faut quitter tous ses clavardoirs actifs. Quand ClientAssistant reçoit ce message, il transmet un message de déconnexion (DISCONNECT, u.nom, c, null) à tous les clavardoirs c où ce client participe. Ensuite, le thread de ClientAssistant pour u se termine chez le serveur. Participation dans le clavardoir. Le client u participe à la discussion en envoyant le message (CHAT, u.id, c, message). Quand ce message est reçu par le ClientAssistant, il transmet le message (CHAT, u.nom, c, message) à tous les participants du clavardoir, étant donné que u fait parti du clavardoire c. Erreurs. Si le client u essaie de déconnecter d un clavardoir c qui n existe pas ou dont il ne fait pas partie, le serveur répond avec un message d erreur (ERROR, null, c, null) ou. (ERROR, u.nom, c, null) 5

6 Interface usager du client JTextField JButton JToolBar Déconnecter usager à inviter Inviter JDesktopPane En haut, il se trouve une barre d outils (JToolBar) avec des boutons pour se déconnecter du serveur (Déconnecter) et pour commenceur un nouveau clavardoir (Inviter), ainsi qu un champ de texte pour y mettre le nom de l usager à inviter. Chaque clavardoir actif est affiché par un JInternalFrame dans un JDesktopPane. JInternalFrame Philinte: Qu'est-ce donc? Qu'avez-vous? Alceste: Laissez-moi, je vous prie. Philinte: Mais encor, dites-moi quelle bizarrerie... Alceste: Laissez-moi là, vous dis-je, et courez vous cacher. Philinte: Mais on entend les gens au moins sans se fâcher Alceste: Moi, je veux me fâcher, et ne veux point entendre. Quitter JButton Philinte: Dans vos brusques chagr_ JLabel avec nom du client JTextField JTextArea dans un JScrollPane Un clavardoir est affiché dans un JInternalFrame dont le titre contient l identificateur du clavardoir. Les composants principaux sont les suivants : un JTextArea qui affiche les messages, un JTextField où l usager peut taper son message, et un bouton pour quitter le clavardoir. La fenêtre d un clavardoire doit être enlevé du GUI quand l usager quitte le clavardoire ou se déconnecte du serveur. Lors de déconnexion il faut aussi désactiver les boutons Inviter et Déconnecter (utiliser setenabled). Les messages sont envoyés vers le serveur en réponse d actions de l usager. bouton Inviter : actionperformed du listener attaché envoie un message au serveur (Nc) le nom du client invité est le contenu du champ de texte à côté du bouton. bouton Déconnecter : actionperformed du listener attaché envoie un message au serveur (Dc) et ferme toutes les fenêtres associées avec le clavardoir. JTextField du clavardoir : actionperformed du listener attaché envoie un message au serveur (Cc), et efface le contenu. bouton Quitter : actionperformed du listener attaché envoie un message au serveur (Qc) et ferme la fenêtre associée avec le clavardoir. Le GUI est mis à jour en réponse de messages arrivés à partir du serveur. Ns : il faut ouvrir une fenêtre pour un nouveau clavardoir. Cs : il faut ajouter (append) le message au JTextArea du clavardoir, en le précédant avec le nom de l interlocuteur. Qs : ajouter un message «Client xxx a quitté le clavardoir.» au JTextArea du clavardoir. E1, E1, E3 : il faut afficher un message d erreur (utiliser JOptionPane). 6

7 Tests L application est lancé à l aide de la classe ChatTester. Les arguments de la ligne de commande sont les noms des usagers. Cette application montre les interfaces usagers par un JTabbedPane, et lance les procéssus légers du serveur. 8 Travail et soumission Une partie du code vous est fournie (Chat.jar sur le site Web du cours). Vous devez développer la reste, en définissant de nouvelles classes quand nécessaire. Vous devez travailler avec les classes suivantes. La classe ChatTester sert à tester votre implantation : il est complètement développé. Les classes Message et Connection sont développées complètement. La classe Client est développée complètement, mais si vous voulez, vous pouvez changer l implantation. La classe Server est partiellement développé Il faut écrire la classe ClientAssistant pour gérer les messages au côté serveur. Il faut écrire la classe ClientGUI qui est l interface usager du client. Vous aurez probablement besoin d autres classes (p.e., pour représenter un clavardoir) : probablement, juste deux ou trois. Travail estimé : 400 600 lignes de code (incluant commentaires et lignes vides pour lisibilité). Compilez un archive jar nommé Chat.jar qui contient les classes du package chat. L archive doit inclure les sources.java et les classes compilées.class. Dans chaque fichier de source, indiquez le membre de l équipe qui l a développé, en javadoc (sous @author dans la documentation de la classe). Dans votre courrier éléctronique, donnez le nom de tous les membres de l équipe. Envoyez le fichier comme attachement dans un courriel à dift1025@iro.umontreal... Votre programme doit être fonctionnel, clair, commenté et original (plagiat=0). 7