TD1: Refactor the client side code.
[TD_SR.git] / TD2 / client / SocketClient.java
index 48a93eb75964660931a2f0cb16f18f082e51167d..b8e0c0b35491a30ae89bde0908b34ecbfb680697 100644 (file)
@@ -10,77 +10,67 @@ public class SocketClient {
     public SocketClient() {
         // établie une connexion au serveur par un appel
         // à connexionServeur()
-        connexionServeur("localhost", 5000);
+        attributesInit();
+        try {
+            connexionServeur("localhost", 5000);
+        }
+        catch (IOException e) {
+            System.err.println("IOException: " + e);
+            closeRWIO();
+        }
     }
 
     public SocketClient(String adresseIPServeur, int portServeur) {
         // établie une connexion au serveur par un appel
         // à connexionServeur()
-        connexionServeur(adresseIPServeur, portServeur);
-    }
-
-    private void connexionServeur(String adresseIPServeur, int portServeur) {
-        // créer un objet socket lié au socket serveur et l'affecte à sock
-        // puis établie les chaînages de flot nécessaires
-        // pour l'envoi et la reception de messages
+        attributesInit();
         try {
-            sock = new Socket(adresseIPServeur, portServeur);
+            connexionServeur(adresseIPServeur, portServeur);
         }
         catch (IOException e) {
             System.err.println("IOException: " + e);
+            closeRWIO();
         }
+    }
+
+    private void connexionServeur(String adresseIPServeur, int portServeur) throws IOException {
+        // créer un objet socket lié au socket serveur et l'affecte à sock
+        // puis établie les chaînages de flot nécessaires
+        // pour l'envoi et la reception de messages
+        sock = new Socket(adresseIPServeur, portServeur);
         InputStream IStream = null;
-        try {
-            IStream = sock.getInputStream();
-        }
-        catch (IOException e) {
-            System.err.println("IOException: " + e);
-        }
+        IStream = sock.getInputStream();
         InputStreamReader IMesg = new InputStreamReader(IStream);
         lecture = new BufferedReader(IMesg);
 
         OutputStream OStream = null;
-        try {
-            OStream = sock.getOutputStream();
-        }
-        catch (IOException e) {
-            System.err.println("IOException: " + e);
-        }
+        OStream = sock.getOutputStream();
         ecriture = new PrintWriter(OStream);
     }
 
+    private void attributesInit() {
+        lecture = null;
+        ecriture  = null;
+        sock = null;
+    }
+
     /**
      * Send a message on the opened client socket
      * @param msg a string containing the message to send
      */
-    public synchronized void sendMsg(String msg) {
-        //NOTE: it's not really required with one socket writer thread.
-        while (msg.isEmpty()) {
-            try {
-                wait();
-            }
-            catch (InterruptedException e) {
-                               System.err.println("InterruptedException: " + e);
-                       }
-        }
+    public void sendMsg(String msg) {
         ecriture.println(msg);
         ecriture.flush();
-        notifyAll();
     }
 
     /**
      * Receive a message sent on the opened client socket
      * @return a string containing the received message
      */
-    public String receiveMsg() {
+    public String receiveMsg() throws IOException {
         String line = new String();
-        try {
-            //FIXME: read only the line before the ending newline
-            line = lecture.readLine();
-        }
-        catch (IOException e) {
-            System.err.println("IOException: " + e);
-        }
+        //FIXME: read only the line before the ending newline
+        line = lecture.readLine();
         return line;
     }
 
@@ -88,9 +78,13 @@ public class SocketClient {
      * Close all opened I/O streams attached to this object instance
      */
     public void closeRWIO() {
-        ecriture.close();
         try {
-            lecture.close();
+            if (sock != null)
+                sock.close();
+            if (lecture != null)
+                lecture.close();
+            if (ecriture != null)
+                ecriture.close();
         }
         catch (IOException e) {
             System.err.println("IOException: " + e);