TD2: Fix the most important bugs in the server code.
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 13 Mar 2018 14:12:56 +0000 (15:12 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 13 Mar 2018 14:12:56 +0000 (15:12 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
TD2/server/BroadcastThreadService.java

index 180f735b49fa442ed5982afa0a286d8c3f0ff879..daf753f665ab16d9e798dcbc45428ce2b0732774 100644 (file)
@@ -18,9 +18,7 @@ public class BroadcastThreadService implements Runnable {
        public void run() {
                try {
                        doService(clientSocket, listWriter);
        public void run() {
                try {
                        doService(clientSocket, listWriter);
-                       //FIXME: also close the BR and PW?
                        clientSocket.close();
                        clientSocket.close();
-                       //FIXME: remove the associated PW from the ArrayList
                } catch (IOException e) {
                        System.err.println("IOException : " + e);
                        e.printStackTrace();
                } catch (IOException e) {
                        System.err.println("IOException : " + e);
                        e.printStackTrace();
@@ -39,14 +37,22 @@ public class BroadcastThreadService implements Runnable {
        public void doService(Socket clientSocket, ArrayList<PrintWriter> sharedList) throws IOException {
                BufferedReader in;
                in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        public void doService(Socket clientSocket, ArrayList<PrintWriter> sharedList) throws IOException {
                BufferedReader in;
                in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
-               sharedList.add(new PrintWriter(clientSocket.getOutputStream()));
+               PrintWriter OWriter = new PrintWriter(clientSocket.getOutputStream());
+               sharedList.add(OWriter);
                boolean end = false;
                while (!end) {
                        String theLine = in.readLine();
                boolean end = false;
                while (!end) {
                        String theLine = in.readLine();
-                       if (theLine.equals("."))
+                       if (theLine.equals(".")) {
                                end = true; // le thread de service doit terminer
                                end = true; // le thread de service doit terminer
+                               break; // do not broadcast the dot that will close clients threads
+                       }
                        broadcastMsg(theLine);
                }
                        broadcastMsg(theLine);
                }
+               sharedList.remove(OWriter);
+               if (in != null)
+                       in.close();
+               if (OWriter != null)
+                       OWriter.close();
                System.out.println("Fin du thread repondant au client, port "
                                                        + clientSocket.getPort());
        }
                System.out.println("Fin du thread repondant au client, port "
                                                        + clientSocket.getPort());
        }