Update of /cvsroot/madsserv/madsserv/src/client In directory sc8-pr-cvs1:/tmp/cvs-serv21455 Modified Files: Client.java DialogServer.java DialogSocket.java MadsservClient.java ThreadRTPManager.java ThreadRead.java ThreadWrite.java Added Files: ErrorPopUp.java Log Message: Ajout d'une classe popup --- NEW FILE: ErrorPopUp.java --- import java.awt.*; import java.net.*; import java.awt.event.*; import java.awt.Component.*; import java.awt.TextComponent.*; import java.awt.geom.Point2D.*; import java.awt.Point.*; /** * <code>ErrorPopUp</code> est une popup qui apparait lorsque des erreurs apparaissent. * @author Xavier Deplancq */ public class ErrorPopUp extends Frame { private Container contentPane; private Panel panelNorth = new Panel(); private Panel panelSouth = new Panel(); private Label errorMessage = new Label(); private BorderLayout borderLayout1 = new BorderLayout(); private Button OK; /** * Constructeur de la classe ErrorPopUp * @param errMessage le Message qui doit etre affiche * @param _client la reference du client */ public ErrorPopUp(String errMessage, Client _client) { enableEvents(AWTEvent.WINDOW_EVENT_MASK); errorMessage.setText(errMessage); panelNorth.add(errorMessage); OK = new Button("OK"); OK.setSize(new Dimension(60, 15)); OK.addActionListener(new ErrorPopUp_OK_ActionAdapter(this)); panelSouth.add(OK); contentPane = this; this.setSize(220, 90); panelNorth.setBackground(new Color(236, 233, 216)); panelSouth.setBackground(new Color(236, 233, 216)); contentPane.setLayout(borderLayout1); contentPane.add(panelNorth, borderLayout1.CENTER); contentPane.add(panelSouth, borderLayout1.SOUTH); //On place la boite de dialogue Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension clientSize = _client.getSize(); Dimension popupSize = this.getSize(); double clientPlaceX = _client.getX(); double clientPlaceY = _client.getY(); if (popupSize.height > clientSize.height) { popupSize.height = clientSize.height; } if (popupSize.width > clientSize.width) { popupSize.width = clientSize.width; } this.setLocation( (int) (clientPlaceX) /*+ ( clientSize.height - popupSize.height) / 2*/, (int) (clientPlaceY) + clientSize.width / 2); showWindow(); } /** * OK_actionPerformed qui sert lorsque l'on appuie sur le bouton OK * @param e l'evenement */ public void OK_actionPerformed(ActionEvent e) { setVisible(false); } /** * processWindowEvent c est une methode qui est appele lorsque l'on ferme la boite de dialogue * @param l evenement qui indique que l'on ferme la fenetre */ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { OK_actionPerformed(null); } } /** * Methode qui affiche la boite de dialogue */ public void showWindow() { setVisible(true); } /** * Classe qui ecoute si l'on appui sur le bouton OK */ class ErrorPopUp_OK_ActionAdapter implements ActionListener { ErrorPopUp adaptee; ErrorPopUp_OK_ActionAdapter(ErrorPopUp adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.OK_actionPerformed(e); } } } Index: Client.java =================================================================== RCS file: /cvsroot/madsserv/madsserv/src/client/Client.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Client.java 13 Mar 2003 02:38:49 -0000 1.5 --- Client.java 13 Mar 2003 23:27:35 -0000 1.6 *************** *** 11,29 **** /** ! * <p>Title: </p> ! * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> ! * <p>Company: </p> ! * @author not attributable * @version 1.0 */ - /** - * <code>Client</code> permet de creer la fenetre principale du client Madsserv. - */ - - public class Client extends Frame { private Container contentPane; --- 11,27 ---- /** ! * <p>Title: Client </p> ! * <p>Description: La Classe Client est l'interface graphique du client</p> * <p>Copyright: Copyright (c) 2003</p> ! * <p>Company: Madsserv Corporation</p> ! * @author Xavier Deplancq * @version 1.0 */ public class Client extends Frame { + /** + * Champs de la Classe Reencode + */ private Container contentPane; *************** *** 58,63 **** private DialogServer dialogServer; /** ! * Contructeur de la classe <code>Client</code>. */ --- 56,63 ---- private DialogServer dialogServer; + + /** ! * Contructeur de la Classe Client */ *************** *** 74,81 **** /** ! * Insere un <code>PlayerPanel</code> dans l'interface graphique de <code>Client</code>. ! * @param pp le PlayerPanel insere. ! * @param vid un booleen caracterisant le caractere audio ou video du player insere par le <code>PlayerPanel</code>. */ public void setPlayerPanel(PlayerPanel pp, boolean vid) { Panel panelTemp; --- 74,82 ---- /** ! * setPlayerPanel crée l'interface graphique du Client ! * @param pp il s'agit d'un PlayerPanel qui est une classe que nous avons crée ! * @vid est un booleen qui nous dit si le player a cree est de la video ou de l'audio */ + public void setPlayerPanel(PlayerPanel pp, boolean vid) { Panel panelTemp; *************** *** 110,114 **** /** ! * Cree l'interface graphique. */ private void jbInit() throws Exception { --- 111,115 ---- /** ! * jbinit lance la creation de l'interface graphique. */ private void jbInit() throws Exception { *************** *** 119,124 **** this.setTitle("Madsserv Client"); setAfficheStatusBar("coucou"); ! URLChoice = new TextField("file:/stud/users/promo04/carbonel/tmp/video/kiss_cool_1.mpeg"); ! AdServer = new TextField("laplace.enst.fr:5100"); menuFile.setLabel("File"); menuOpenURL.setLabel("Open URL"); --- 120,125 ---- this.setTitle("Madsserv Client"); setAfficheStatusBar("coucou"); ! URLChoice = new TextField("file:///c:\\temp\\kiss_cool_1.mpeg"); ! AdServer = new TextField("dronej.rezel.com:5100"); menuFile.setLabel("File"); menuOpenURL.setLabel("Open URL"); *************** *** 165,171 **** AdLabel.setSize(new Dimension(30, 15)); AdServer.setSize(new Dimension(30, 15)); - go = new Button("Go!"); - go.setSize(new Dimension(60, 15)); - go.addActionListener(new Client_boutongo_ActionAdapter(this)); panelNorth.setLayout(gridBagLayoutNorth); --- 166,169 ---- *************** *** 193,198 **** /** ! * Traite l'evenement cree par le clic sur le menu Quitter. ! * @param l'evenement associe au clic sur le menu Quitter. */ public void menuFileExit_actionPerformed(ActionEvent e) { --- 191,196 ---- /** ! * menuFileExit_actionPerformed est à l'ecoute d'un evenement signifiant l'arret du client ! * @param e c'est l'evenemet qui met fin au client */ public void menuFileExit_actionPerformed(ActionEvent e) { *************** *** 208,211 **** --- 206,213 ---- } + /** + * processWindowEvent Methode qui permet de quitter le client quand on clique pour fermer la fenetre + * @param e c'est l'evenement qui indique que l'on a clique sur le bouton pour fermer la fenetre + */ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); *************** *** 216,221 **** /** ! * Traite l'evenement cree par le clic sur le bouton Go. ! * @param evt l'evenement associe au clic sur le bouton Go. */ public void boutongo_actionPerformed(ActionEvent evt) { --- 218,223 ---- /** ! * boutongo_actionPerformed Methode qui permet de lancer la connexion lorsque l'on clique sur le bouton go ! * @param evt c'est l'evenement qui indique que l'on a clique sur le bouton go */ public void boutongo_actionPerformed(ActionEvent evt) { *************** *** 225,234 **** if (mySocket == null) { try { ! mySocket = new Socket(getAddressServer(), getServerPort() ! /*,InetAddress.getLocalHost(), 5020*/); } catch (Exception e) { ! System.out.println("Le serveur ou le port n'est pas correct"); ! System.exit(0); } --- 227,234 ---- if (mySocket == null) { try { ! mySocket = new Socket(getAddressServer(), getServerPort()); } catch (Exception e) { ! showError("Le serveur ou le port n'est pas correct"); } *************** *** 256,262 **** } - /** - * Supprime la connexion au serveur en stoppant le module <code>DialogServer</code>. - */ public void endConnexion() { dialogServer.stop(); --- 256,259 ---- *************** *** 264,270 **** } /** ! * Renvoie l'InetAddress du serveur. ! * @return l'InetAddress du serveur. */ public InetAddress getAddressServer() { --- 261,272 ---- } + public void showError(String messageErreur) + { + ErrorPopUp errorPopUp = new ErrorPopUp(messageErreur,this); + } + /** ! * getAddressServer, cette methode permet d'obtenir l'InetAddress du serveur sur lequel il faut se connecter, cette adresse est rentré à la main dans une zone de texte sur l'interface graphique du client ! * @return InetAddress du server */ public InetAddress getAddressServer() { *************** *** 284,289 **** /** ! * Renvoie le numero de port du serveur sur lequel il attends les connexions clients. ! * @return int le numero du port. */ public int getServerPort() { --- 286,291 ---- /** ! * getServerPorrt est une methode qui permet d'obtenir le Numero de port du serveur, ce numero de port est rentre dans une zone de texte sur l'interface graphique du client ! * @return int le numero du port sur lequel, on doit se connecter au serveur */ public int getServerPort() { *************** *** 299,305 **** /** ! * Renvoie l'URL du fichier multimedia demande par l'utilisateur. ! * Cette URL est entree par l'intermediaire d'une zone de texte. ! * @return String l'adresse du media demande. */ public String getURL() { --- 301,306 ---- /** ! * getURL permet d'obtenir l'URL du fichier multimedia que l'on souhaite visionner, cet URL est rentre dans une zone de texte sur l'interface graphique du client ! * @return String l'adresse du media demande */ public String getURL() { *************** *** 308,316 **** } - /** - * Renvoie le format de diffusion prefere de l'utilisateur. - * Cete format est precise via l'interface graphique. - * @return String le format prefere. - */ public String getFormatPrefere() { --- 309,312 ---- *************** *** 331,336 **** /** ! * Met a jour la barre d'etats du client. ! * @param _message le message a afficher dans la barre d'etats. */ public void setAfficheStatusBar(String _message) { --- 327,332 ---- /** ! * setAfficheStatusBar est une methode qui permet d'afficher en bas du client un message envoye par le server ! * @param _message un message envoye sous forme de String envoye par le serveur */ public void setAfficheStatusBar(String _message) { *************** *** 338,341 **** --- 334,340 ---- } + /** + * Client_menuFileExit_ActionAdapter, classe qui ecoute pour savoir si on clique sur le menu exit et envoie alors l'evenement + */ class Client_menuFileExit_ActionAdapter implements ActionListener { *************** *** 351,354 **** --- 350,356 ---- } + /** + * Client_boutongo_ActionAdapter classe qui ecoute pour savoir si on clique sur le bouton go et envoie alors l'evenement + */ class Client_boutongo_ActionAdapter implements ActionListener { *************** *** 364,367 **** --- 366,372 ---- } + /** + * Client_Menu_OpenURL_ActionAdapter classe qui ecoute pour savoir si on clique sur le bouton OpenURL et envoie alors l'evenement + */ class Client_Menu_OpenURL_ActionAdapter implements ActionListener { Index: DialogServer.java =================================================================== RCS file: /cvsroot/madsserv/madsserv/src/client/DialogServer.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** DialogServer.java 13 Mar 2003 02:38:49 -0000 1.4 --- DialogServer.java 13 Mar 2003 23:27:35 -0000 1.5 *************** *** 14,18 **** private ThreadRTPManager threadRTPManager; private String[] sessions = new String[2]; - ; /** * C'est le constructeur de la classe --- 14,17 ---- *************** *** 58,62 **** catch (NumberFormatException e) { System.out.println("Le deuxieme champ du message est incorrect"); - } --- 57,60 ---- *************** *** 70,74 **** } case 5: { ! // if (lgth < 2) raise exception; //lecture du deuxieme champ : ClientID try { --- 68,72 ---- } case 5: { ! //if (lgth < 2) raise exception; //lecture du deuxieme champ : ClientID try { *************** *** 77,93 **** catch (NumberFormatException e) { System.out.println("Le deuxieme champ du message est incorrect"); - - // try{ - System.out.println(_message[1]); - /*} - catch (NumberFormatException e) - { - System.out.println("Le troisieme champ du message est incorrect"); - }*/ } threadRTPManager.Fermer(); client.endConnexion(); System.out.println("coucou de fin"); - //System.out.println(mySocket.isClosed()); break; } --- 75,85 ---- catch (NumberFormatException e) { System.out.println("Le deuxieme champ du message est incorrect"); } + + client.showError(_message[1]); + threadRTPManager.Fermer(); client.endConnexion(); System.out.println("coucou de fin"); break; } *************** *** 104,108 **** /** ! *on regarde si le threadRTPManager existe, si iln'existe pas on le cree, sinon on le detruit et on en cree un nouveau */ if (threadRTPManager == null) { --- 96,100 ---- /** ! *on regarde si le threadRTPManager existe, si il n'existe pas on le cree, sinon on le detruit et on en cree un nouveau */ if (threadRTPManager == null) { *************** *** 140,145 **** System.out.println("Le troisieme champ du message est incorrect"); } /** ! * On stocke dans le variable sessions, l'adresse du server et les ports pour les diffusions audio et vdeo */ sessionTemp = client.getAddressServer().getHostAddress().toString(); --- 132,138 ---- System.out.println("Le troisieme champ du message est incorrect"); } + /** ! * On stocke dans le variable sessions, l'adresse du server et les ports pour les diffusions audio et video */ sessionTemp = client.getAddressServer().getHostAddress().toString(); Index: DialogSocket.java =================================================================== RCS file: /cvsroot/madsserv/madsserv/src/client/DialogSocket.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** DialogSocket.java 11 Mar 2003 20:06:53 -0000 1.1 --- DialogSocket.java 13 Mar 2003 23:27:36 -0000 1.2 *************** *** 1,94 **** ! import java.util.*; ! import java.io.*; ! import java.net.*; ! ! /** ! * C'est la classe DialogSocket ! */ ! public abstract class DialogSocket { ! ! // identite du client ! protected int clientID; ! ! // socket gere par DialogSocket ! protected Socket mySocket; ! ! // streams d'entree et de sortie ! protected PrintWriter output; ! protected InputStreamReader input; ! protected BufferedReader binput; ! ! ! // Thread d'entree et thread de sortie ! ThreadRead threadInput; ! ThreadWrite threadOutput; ! ! /** ! * Contructeur de la classe DialogSocket ! * @param _mySocket, c'est le socket qui vient juste d'etre cree ! */ ! public DialogSocket(Socket _mySocket) { ! mySocket = _mySocket; ! ! try { ! output = new PrintWriter(mySocket.getOutputStream()); ! input = new InputStreamReader(mySocket.getInputStream()); ! binput = new BufferedReader(input); ! ! threadInput = new ThreadRead("Thread d'ecoute ID", binput, this); ! } ! catch (IOException e) { ! System.out.println(e.getMessage()); ! } ! ! } ! /** ! * incomingMessage methode abstraite qui gere l'arrive de nouveau message ! * @param _type, c'est le type du message qui arrive ! * @param _message, c'est un tableau de String de messages qui arrivent ! */ ! public abstract void incomingMessage(int _type, String[] _message); ! ! /** ! * sendMessage methode qui gere l'envoie de messages vers le server ! * @param _type, c'est le type du message a envoye ! * @param _message, c'est un tableau de String contenant les messages pour le server ! */ ! public void sendMessage(int _type, String[] _message) { ! threadOutput = new ThreadWrite("Thread d'ecriture ID", output, this); ! String messageToSend[] = new String[_message.length + 1]; ! messageToSend[0] = String.valueOf(clientID); ! for (int i = 0; i < _message.length; i++) { ! messageToSend[i + 1] = _message[i]; ! } ! threadOutput.setMessageToSend(_type, messageToSend); ! threadOutput.start(); ! } ! ! /** ! * getClientID methode qui retourne le numero du client qui se connecte ! */ ! public int getClientID() { ! return clientID; ! } ! /** ! * start methode qui demarre le thread ! */ ! public void start() { ! threadInput.start(); ! } ! /** ! * stop methode qui mets fin au dialogue avec le serveur ! */ ! public synchronized void stop() { ! try { ! threadInput = null; ! System.gc(); ! binput.close(); ! mySocket.close(); ! System.out.println("Fin DialogServer " + clientID); ! } ! catch (Exception e) {} ! } ! } --- 1,142 ---- ! import java.util.*; ! import java.io.*; ! import java.net.*; ! ! /** ! * <code>DialogServer</code> fournit le modele d'objet permettant la gestion ! * de la communication par socket entre deux stations grace a deux threads ! * (lecture et ecriture). <code>DialogSocket</code> assure une communication ! * dediee. ! * <p> ! * <code>DialogServer</code> fournit une methode d'envoi de messages sur le ! * socket (par l'intermediaire de {@link ThreadWrite} et declare la methode ! * abstraite de reception des messages. ! * @see ThreadRead ! * @see ThreadWrite ! * @author Julien Carbonell ! */ ! ! public abstract class DialogSocket { ! ! private final int TIME_OUT = 1000; ! ! // identite du client ! protected int clientID; ! ! // socket gere par DialogSocket ! protected Socket mySocket; ! ! // streams d'entree et de sortie ! protected PrintWriter output; ! protected InputStreamReader input; ! protected BufferedReader binput; ! ! // Thread d'entree et thread de sortie ! protected ThreadRead threadInput; ! protected ThreadWrite threadOutput; ! ! /** ! * Constructeur de <code>DialogSocket</code>. ! * @param _mySocket le {@link Socket} de communication. ! */ ! ! public DialogSocket(Socket _mySocket) { ! mySocket = _mySocket; ! ! try { ! //mySocket.setSoTimeout(TIME_OUT); ! output = new PrintWriter(mySocket.getOutputStream()); ! input = new InputStreamReader(mySocket.getInputStream()); ! binput = new BufferedReader(input); ! ! threadInput = new ThreadRead("Thread d'ecoute ID", binput, this); ! } ! catch (IOException e) { ! System.out.println(e.getMessage()); ! } ! /*catch (SocketException e) { ! System.out.println(e.getMessage()); ! }*/ ! ! } ! ! /** ! * Traite l'arrivee d'un nouveau message sur le socket. ! * @param _type le type du message. ! * @param _message le tableau de <code>String</code> contenant les champs du ! * message reçu. ! */ ! ! public abstract void incomingMessage(int _type, String[] _message); ! ! /** ! * Traite la demande d'envoi d'un message sur le socket. Le message a envoyer ! * est fourni sous la forme d'un tableau de {@link String} contenant les ! * champs du message ! * @param _type le type du message. ! * @param _message le tableau de <code>String</code> contenant les champs du ! * message a envoyer. ! */ ! ! public void sendMessage(int _type, String[] _message) { ! threadOutput = new ThreadWrite("Thread d'ecriture ID", output, this); ! String[] messageToSend; ! if (_message == null) { ! messageToSend = new String[1]; ! messageToSend[0] = String.valueOf(clientID); ! } ! else { ! messageToSend = new String[_message.length + 1]; ! messageToSend[0] = String.valueOf(clientID); ! for (int i = 0; i < _message.length; i++) { ! messageToSend[i + 1] = _message[i]; ! } ! } ! threadOutput.setMessageToSend(_type, messageToSend); ! threadOutput.start(); ! ! } ! ! /** ! * Renvoie l'ID du client. ! * @return ID du client. ! */ ! ! public int getClientID() { ! return clientID; ! } ! ! /** ! * Demarre l'ecoute du socket ! */ ! ! public void start() { ! threadInput.start(); ! } ! ! /** ! * Stoppe le gestion de la communication et ferme le socket. ! */ ! ! public synchronized void stop() { ! try { ! System.err.println("j'entre dans le stop de dialog socket"); ! //threadInput = null; ! //System.gc(); ! ! //threadInput.interrupt(); ! //threadInput.setEnd(); ! System.err.println("le thread est mort"); ! Thread.sleep(1000); ! //binput.close(); ! //System.err.println("le binput est mort"); ! if (!mySocket.isClosed()) ! mySocket.close(); ! System.err.println("le socket est mort"); ! //System.err.println("le socket est ferme " + mySocket.isClosed()); ! System.out.println("Fin DialogServer " + clientID); ! } ! catch (Exception e) {} ! } ! } Index: MadsservClient.java =================================================================== RCS file: /cvsroot/madsserv/madsserv/src/client/MadsservClient.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** MadsservClient.java 11 Mar 2003 20:06:53 -0000 1.3 --- MadsservClient.java 13 Mar 2003 23:27:36 -0000 1.4 *************** *** 6,14 **** /** ! * <p>Title: </p> ! * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> ! * <p>Company: </p> ! * @author not attributable * @version 1.0 **/ --- 6,14 ---- /** ! * <p>Title: MadsservClient</p> ! * <p>Description: La Classe MadsservClient contient la classe main du client du projet, c'est lui qui le lance</p> * <p>Copyright: Copyright (c) 2003</p> ! * <p>Company: Madsserv Corporation</p> ! * @author Xavier Deplancq * @version 1.0 **/ *************** *** 22,31 **** */ private boolean packFrame = false; - //private Socket mySocket; /** * MadsservClient constructeur de la calsse */ ! public MadsservClient( /*String sessions[]*/) { Client frame = new Client(); --- 22,30 ---- */ private boolean packFrame = false; /** * MadsservClient constructeur de la calsse */ ! public MadsservClient() { Client frame = new Client(); *************** *** 37,46 **** } else { - // String[] request = new String[1]; - // request[0] = ""; frame.validate(); - // dialogServer.start(); - // dialogServer.sendMessage(0,request); - // threadRTPManager.start(); } --- 36,40 ---- *************** *** 60,64 **** /** ! * Methode main du client */ --- 54,58 ---- /** ! * Methode main de MadsservClient */ Index: ThreadRTPManager.java =================================================================== RCS file: /cvsroot/madsserv/madsserv/src/client/ThreadRTPManager.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ThreadRTPManager.java 13 Mar 2003 02:38:49 -0000 1.4 --- ThreadRTPManager.java 13 Mar 2003 23:27:36 -0000 1.5 *************** *** 38,42 **** Thread.sleep(1000); } ! catch (Exception e) {} finally { --- 38,44 ---- Thread.sleep(1000); } ! catch (Exception e) { ! cl.showError("La connexion n'a pas pu etre initialise"); ! } finally { *************** *** 44,48 **** System.err.println("Exiting ThreadRTPManager"); System.out.println(Thread.currentThread()); - } } --- 46,49 ---- Index: ThreadRead.java =================================================================== RCS file: /cvsroot/madsserv/madsserv/src/client/ThreadRead.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ThreadRead.java 11 Mar 2003 20:06:53 -0000 1.1 --- ThreadRead.java 13 Mar 2003 23:27:36 -0000 1.2 *************** *** 4,16 **** /** ! * classe ThreadRead qui permet de lire ce qui circule sur le socket */ public class ThreadRead extends Thread { // objet parent qui gere les entrees-sorties sur le socket protected DialogSocket parent; ! // inputstream sur lequel sont lus les messages protected BufferedReader binput; --- 4,26 ---- /** ! * <code>ThreadRead</code> definit un thread d'ecoute sur un {@link BufferedReader}. ! * Il effectue une ecoute permanente. ! * <p> ! * Il gere l'extraction du message en isolant les elements protocolaires de la ! * transmission du message. ! * @see ThreadWrite ! * @see DialogSocket ! * @author Julien Carbonell */ + public class ThreadRead extends Thread { + boolean end = false; + // objet parent qui gere les entrees-sorties sur le socket protected DialogSocket parent; ! // BufferedReader sur lequel sont lus les messages protected BufferedReader binput; *************** *** 21,25 **** /** ! * Constructeur de la classe */ public ThreadRead(String _name, BufferedReader _binput, --- 31,38 ---- /** ! * Constructeur de <code>ThreadRead</code>. ! * @param _name le nom du thread. ! * @param _binput le {@link BufferedReader} sur lequel lit <code>ThreadRead</code>. ! * @param _parent le {@link DialogSocket} qui gere le <code>ThreadRead</code>. */ public ThreadRead(String _name, BufferedReader _binput, *************** *** 29,34 **** binput = _binput; } /** ! * la methode run du thread */ public void run() { --- 42,48 ---- binput = _binput; } + /** ! * Redefinit la methode <code>run</code> de la classe parent <code>Thread</code>. */ public void run() { *************** *** 36,61 **** while ( (temp = binput.readLine()) != null) { if (temp != null) { ! if (waitingMessage && (temp.charAt(0) == '#')) { ! // un nouveau message commence ! waitingMessage = false; ! } ! else { ! if (!waitingMessage && (temp.charAt(0) == '#')) { ! waitingMessage = true; ! messageType = Integer.parseInt(message.substring(0, ! message.indexOf('\n'))); ! System.out.println("Le Thread Read a recu\n" + message); ! message = message.substring(message.indexOf('\n') + 1, ! message.length() - 1); ! parent.incomingMessage(messageType, parseMessage(message)); ! message = ""; } else { ! message = message.concat(temp + "\n"); } } } } ! } catch (Exception e) { e.printStackTrace(); --- 50,79 ---- while ( (temp = binput.readLine()) != null) { if (temp != null) { ! if (waitingMessage && (temp.charAt(0) == '#')) { ! // un nouveau message commence ! waitingMessage = false; } else { ! if (!waitingMessage && (temp.charAt(0) == '#')) { ! waitingMessage = true; ! messageType = Integer.parseInt(message.substring(0, ! message.indexOf('\n'))); ! System.out.println("Le Thread Read a recu\n" + message); ! message = message.substring(message.indexOf('\n') + 1, ! message.length() - 1); ! parent.incomingMessage(messageType, parseMessage(message)); ! message = ""; ! } ! else { ! message = message.concat(temp + "\n"); ! } } } + } } ! /* catch (SocketTimeoutException e) { ! System.out.println(e.getMessage()); ! }*/ catch (Exception e) { e.printStackTrace(); *************** *** 63,79 **** finally { try { System.out.println(getName() + Thread.currentThread() + " : Stopped !!! "); } catch (Exception e) { } } } ! /** ! * parseMessage, methode qui retourne un tableau de String ! * @param _message qui est une chaine de characteres ! * @return String[] ! */ protected String[] parseMessage(String _message) { return _message.split("\n"); --- 81,95 ---- finally { try { + // binput.close(); System.out.println(getName() + Thread.currentThread() + " : Stopped !!! "); } catch (Exception e) { + System.out.println(e.getMessage()); } } } ! protected String[] parseMessage(String _message) { return _message.split("\n"); Index: ThreadWrite.java =================================================================== RCS file: /cvsroot/madsserv/madsserv/src/client/ThreadWrite.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ThreadWrite.java 11 Mar 2003 20:06:53 -0000 1.1 --- ThreadWrite.java 13 Mar 2003 23:27:37 -0000 1.2 *************** *** 4,15 **** /** ! * classe ThreadWrite, cette classe permet d'ecrire sur le socket */ public class ThreadWrite extends Thread { - /** - * champs de cette classe - */ // objet parent qui gere les entrees-sorties sur le socket protected DialogSocket parent; --- 4,20 ---- /** ! * <code>ThreadWrite</code> definit un thread d'ecriture sur un {@link PrintWriter}. ! * Sa duree d'execution est celle de l'envoi d'un message. ! * <p> ! * Il gere l'encapsulation du message en ajoutant les elements protocolaires de la ! * transmission du message. ! * @see ThreadRead ! * @see DialogSocket ! * @author Julien Carbonell */ + public class ThreadWrite extends Thread { // objet parent qui gere les entrees-sorties sur le socket protected DialogSocket parent; *************** *** 21,25 **** /** ! * Constructeur de la classe */ public ThreadWrite(String _name, PrintWriter _output, --- 26,33 ---- /** ! * Constructeur de <code>ThreadWrite</code>. ! * @param _name le nom du thread. ! * @param _binput le {@link PrinterWriter} sur lequel ecrit <code>ThreadWrite</code>. ! * @param _parent le {@link DialogSocket} qui gere le <code>ThreadWrite</code>. */ public ThreadWrite(String _name, PrintWriter _output, *************** *** 31,48 **** // met a jour le message a envoyer - /** - * setMessageToSend methode permettant de foramter le message a envoyer - * @param _type un entier donnant le type de message a envoyer - * @String[] _message un tableau de String[] qui contient les messages a envoyer au serveur - */ public synchronized void setMessageToSend(int _type, String[] _message) { ! messageToSend = ""; messageToSend = _type + "\n"; ! for (int i = 0; i < _message.length; i++) { messageToSend = messageToSend.concat(_message[i] + "\n"); } } /** ! * methode run de ce Thread */ public void run() { --- 39,52 ---- // met a jour le message a envoyer public synchronized void setMessageToSend(int _type, String[] _message) { ! messageToSend=""; messageToSend = _type + "\n"; ! for(int i = 0; i< _message.length; i++) { messageToSend = messageToSend.concat(_message[i] + "\n"); } } + /** ! * Redefinit la methode <code>run</code> de la classe parent <code>Thread</code>. */ public void run() { *************** *** 50,70 **** if (messageToSend.compareTo("") != 0) { System.out.println("Message envoye par le thread output " + "#\n" + ! messageToSend + "#"); ! output.println("#\n" + messageToSend + "#"); ! output.flush(); ! } ! } ! catch (Exception e) { ! e.printStackTrace(); ! } ! finally { ! try { ! System.out.println(getName() + Thread.currentThread() + ! " : Stopped !!! "); ! } ! catch (Exception e) { ! } ! } ! } } --- 54,74 ---- if (messageToSend.compareTo("") != 0) { System.out.println("Message envoye par le thread output " + "#\n" + ! messageToSend + "#"); ! output.println("#\n" + messageToSend + "#"); ! output.flush(); ! } ! } ! catch (Exception e) { ! e.printStackTrace(); ! } ! finally { ! try { ! System.out.println(getName() + Thread.currentThread() + ! " : Stopped !!! "); ! } ! catch (Exception e) { ! } ! } ! } } |