import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class Connection implements Runnable {

    private Socket clientSocket;
    private boolean running = true;
    private EchoServer server;

    public Connection(Socket clientSocket, EchoServer server) {
        this.clientSocket = clientSocket;
        this.server = server;
    }

    public void sendMessage(String message) {
        try {
            DataOutputStream output = new DataOutputStream(clientSocket.getOutputStream());
            output.writeUTF(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        try (DataInputStream input = new DataInputStream(clientSocket.getInputStream());
             DataOutputStream output = new DataOutputStream(clientSocket.getOutputStream())) {
            String message;
            while (running && !(message = input.readUTF()).equals("\\exit")) {
                System.out.println("Empfangen: " + message);
                if (message.startsWith("\\broadc")) {
                    String broadcastMessage = message.substring(7);
                    server.broadcastMessage("Broadcast: " + broadcastMessage, this);
                } else {
                    output.writeUTF("echo: " + message);
                }
            }
            output.writeUTF("echo: \\exit");
            System.out.println("Verbindung wird geschlossen zu: " + clientSocket.getInetAddress());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                clientSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}