TD2: Add basic IHM code for the chat.
[TD_SR.git] / TD2 / IHM / SocketClient.java
diff --git a/TD2/IHM/SocketClient.java b/TD2/IHM/SocketClient.java
new file mode 100644 (file)
index 0000000..92c7412
--- /dev/null
@@ -0,0 +1,133 @@
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+public class SocketClient {
+    BufferedReader lecture;  // pour le flot d'entrée venant du serveur
+    PrintWriter ecriture;  // pour le flot de sortie vers le serveur
+    ObjectInput oLecture;
+    ObjectOutput oEcriture;
+    Socket sock; // le socket client
+
+    public SocketClient() {
+        // établie une connexion au serveur par un appel
+        // à connexionServeur()
+        attributesInit();
+        try {
+            connexionServeur("localhost", 5000);
+        }
+        catch (IOException e) {
+            System.err.println("IOException: " + e);
+            e.printStackTrace();
+            closeRWIO();
+        }
+    }
+
+    public SocketClient(String adresseIPServeur, int portServeur) {
+        // établie une connexion au serveur par un appel
+        // à connexionServeur()
+        attributesInit();
+        try {
+            connexionServeur(adresseIPServeur, portServeur);
+        }
+        catch (IOException e) {
+            System.err.println("IOException: " + e);
+            e.printStackTrace();
+            closeRWIO();
+        }
+    }
+
+    private void connexionServeur(String adresseIPServeur, int portServeur, boolean hasoStream) 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);
+
+        OutputStream OStream = sock.getOutputStream();
+        ecriture = new PrintWriter(OStream);
+        if (hasoStream)
+            oEcriture = new ObjectOutputStream(OStream);
+
+        InputStream IStream = sock.getInputStream();
+        InputStreamReader IMesg = new InputStreamReader(IStream);
+        lecture = new BufferedReader(IMesg);
+        if (hasoStream)
+            oLecture = new ObjectInputStream(IStream);
+    }
+
+    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
+        connexionServeur(adresseIPServeur, portServeur, false);
+    }
+
+    private void attributesInit() {
+        sock = null;
+        lecture = null;
+        ecriture  = null;
+        oLecture = null;
+        oEcriture = null;
+    }
+
+    /**
+     * Send a message on the opened client socket
+     * @param msg a string containing the message to send
+     */
+    public void sendMsg(String msg) {
+        ecriture.println(msg);
+        ecriture.flush();
+    }
+
+    /**
+     * Send an object message on the opened client socket
+     * @param msg a string containing the message to send
+     */
+    public void sendoMsg(Message oMsg) throws IOException {
+        oEcriture.writeObject(oMsg);
+        oEcriture.flush();
+    }
+
+    /**
+     * Receive a message sent on the opened client socket
+     * @return a string containing the received message
+     */
+    public String receiveMsg() throws IOException {
+        String line = new String();
+        //FIXME?: read only the line before the ending newline
+        line = lecture.readLine();
+        return line;
+    }
+
+    /**
+     * Receive an object message sent on the opened client socket
+     * @return a string containing the received message
+     */
+    public Message receiveoMsg() throws IOException, ClassNotFoundException {
+        return (Message)oLecture.readObject();
+    }
+
+    /**
+     * Close all opened I/O streams attached to this object instance
+     */
+    public void closeRWIO() {
+        try {
+            if (sock != null)
+                sock.close();
+            if (lecture != null)
+                lecture.close();
+            if (ecriture != null)
+                ecriture.close();
+            if (oLecture != null)
+                oLecture.close();
+            if (oEcriture != null) {
+                oEcriture.close();
+            }
+        }
+        catch (IOException e) {
+            System.err.println("IOException: " + e);
+            e.printStackTrace();
+        }
+    }
+
+} // fin classe SocketClient