Skip to content

File CentralizedMTP.java

File List > centralized > CentralizedMTP.java

Go to the documentation of this file

package skydata.centralized;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;



public class CentralizedMTP {
    private static List<String> tuples = new ArrayList<>();

    public static void main(String[] args) {
        int port = 9999; // Port d'écoute du serveur

        try {
            @SuppressWarnings("resource")
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Serveur TCP démarré sur le port " + port);

            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("Client connecté : " + clientSocket);

                // Création d'un thread pour traiter chaque client
                ClientHandler clientHandler = new ClientHandler(clientSocket);
                new Thread(clientHandler).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static class ClientHandler implements Runnable {
        private Socket clientSocket;

        public ClientHandler(Socket socket) {
            this.clientSocket = socket;
        }

        @Override
        public void run() {
            try {
                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

                String request;
                while ((request = in.readLine()) != null) {
                    System.out.println("Request received : " + request);
                    String[] parts = request.split(" ");
                    if (parts.length >= 1) {
                        String command = parts[0].trim();
                        switch (command) {
                            case "ADD":
                                if (parts.length == 3) {
                                    String addr = parts[1];
                                    String mtp = parts[2];
                                    tuples.add(addr + " " + mtp);
                                    out.println("ADD : (" + addr + ", " + mtp + ")");
                                } else {
                                    out.println("Error : ADD requires two arguemnts");
                                }
                                break;
                            case "GET":
                                StringBuilder result = new StringBuilder();
                                for (String tuple : tuples) {
                                    result.append(tuple).append("\n");
                                }
                                result.append("EOF");
                                out.println(result.toString());
                                System.out.println("Answer : " + result.toString() + " " + tuples.toString());
                                break;
                            default:
                                out.println("Unknown command : " + command);
                        }
                    } else {
                        out.println("Errorr : none command");
                    }
                }

                in.close();
                out.close();
                clientSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}