import org.acplt.oncrpc.*;
import java.io.IOException;
import java.net.InetAddress;
import java.util.*;

public class ChatServerMain extends ChatServerServerStub {
    // Liste des clients sous forme "adresse:port"
    private static final List<String> clients = new ArrayList<>();

    public ChatServerMain() throws OncRpcException, IOException {
        super();
    }

    // Service de connexion : le client envoie "adresse:port"
    @Override
    public void CONNEXION_1(String adressePort) {
        if (!clients.contains(adressePort)) {
            clients.add(adressePort);
            System.out.println("Nouveau client connecté : " + adressePort);
        }
    }

    // Service d'envoi : diffuse à tous les clients connus
    @Override
    public void ENVOI_1(String message) {
        System.out.println("Message reçu : " + message);
        for (String clientAddrPort : clients) {
            try {
                String[] parts = clientAddrPort.split(":");
                InetAddress addr = InetAddress.getByName(parts[0]);
                int port = Integer.parseInt(parts[1]);
                ChatClientClient client = new ChatClientClient(addr, port, OncRpcProtocols.ONCRPC_TCP);
                client.RECEPTION_1(message);
            } catch (Exception e) {
                System.err.println("Erreur lors de l'envoi à " + clientAddrPort + " : " + e.getMessage());
            }
        }
    }

    public static void main(String[] args) throws Exception {
        System.out.println("Serveur de chat démarré et en attente de connexions...");
        ChatServerMain server = new ChatServerMain();
        server.run();
    }
}
