import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;

public class ServerGema {
    public static void main(String[] args) throws Exception {
        ServerSocket server = new ServerSocket(0, 1, InetAddress.getLoopbackAddress());

        Thread pegawaiServer = new Thread(() -> {
            try (Socket sambungan = server.accept();
                 BufferedReader masuk = new BufferedReader(new InputStreamReader(
                         sambungan.getInputStream(), StandardCharsets.UTF_8));
                 PrintWriter keluar = new PrintWriter(new OutputStreamWriter(
                         sambungan.getOutputStream(), StandardCharsets.UTF_8), true)) {

                String baris;
                while ((baris = masuk.readLine()) != null) {
                    if (baris.equals("SELESAI")) {
                        keluar.println("sampai jumpa");
                        break;
                    }
                    keluar.println("gema: " + baris);
                }
            } catch (IOException e) {
                System.out.println("server galat : " + e.getMessage());
            }
        });
        pegawaiServer.start();

        try (Socket klien = new Socket(InetAddress.getLoopbackAddress(), server.getLocalPort());
             PrintWriter keluar = new PrintWriter(new OutputStreamWriter(
                     klien.getOutputStream(), StandardCharsets.UTF_8), true);
             BufferedReader masuk = new BufferedReader(new InputStreamReader(
                     klien.getInputStream(), StandardCharsets.UTF_8))) {

            for (String pesan : new String[]{"Budi", "Siti", "Dewi"}) {
                keluar.println(pesan);
                System.out.println("klien kirim  : " + pesan);
                System.out.println("server balas : " + masuk.readLine());
            }
            keluar.println("SELESAI");
            System.out.println("klien kirim  : SELESAI");
            System.out.println("server balas : " + masuk.readLine());
        }
        pegawaiServer.join();
        server.close();
    }
}
