#Пример Tower Client

#Java

java
public class TowerClient {
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("proxy-host", 25580);
        Gson gson = new Gson();

        BufferedWriter writer = new BufferedWriter(
            new OutputStreamWriter(socket.getOutputStream()));
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(socket.getInputStream()));

        // 1. Аутентификация
        JsonObject auth = new JsonObject();
        auth.addProperty("type", "auth");
        auth.addProperty("login", "admin");
        auth.addProperty("password", "changeme");
        writer.write(gson.toJson(auth) + "\n");
        writer.flush();

        String response = reader.readLine();
        System.out.println("Auth: " + response);

        // 2. Регистрация сервера
        JsonObject register = new JsonObject();
        register.addProperty("type", "register");
        register.addProperty("name", "survival-1");
        register.addProperty("host", "127.0.0.1");
        register.addProperty("port", 25565);
        register.addProperty("serverType", "survival");
        register.addProperty("maxPlayers", 50);
        writer.write(gson.toJson(register) + "\n");
        writer.flush();

        response = reader.readLine();
        System.out.println("Register: " + response);

        // 3. Heartbeat
        while (true) {
            JsonObject heartbeat = new JsonObject();
            heartbeat.addProperty("type", "heartbeat");
            heartbeat.addProperty("timestamp", System.currentTimeMillis());
            writer.write(gson.toJson(heartbeat) + "\n");
            writer.flush();
            Thread.sleep(10000);
        }
    }
}

💡 TIP: В production используйте Netty клиент с автоматическим реконнектом вместо raw сокетов.