Всем привет.
для управления telnet и xml-rpc оставим в прошлом.
для примера, хотим сделать удаленное выключение логин-сервера.
делаем так:
импорты для шапки:
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.URLDecoder;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.Arrays;
import java.util.Collections;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;
import com.sun.net.httpserver.HttpServer;
пересобираем логин,
выключаем так:
curl localhost:8000/restapi?command=Shutdown
ну или любым другим способом (скрипт по крону, php на веб-сервере, и т.д.)
таким же макаром - выдаем донат, запускаем эвэнты, собираем статистику и т.д...
для управления telnet и xml-rpc оставим в прошлом.
для примера, хотим сделать удаленное выключение логин-сервера.
делаем так:
Код:
// Implementing REST API //Aztur
int RestServerPort = 8000;
HttpServer restserver = HttpServer.create(new InetSocketAddress(RestServerPort), 0);
restserver.createContext("/restapi", (exchange -> {
if ("GET".equals(exchange.getRequestMethod())) {
Map<String, List<String>> params = splitQuery(exchange.getRequestURI().getRawQuery());
String NotFoundCommand = "NotACommand";
String command = params.getOrDefault("command", List.of(NotFoundCommand)).stream().findFirst().orElse(NotFoundCommand);
switch(command) {
case "Shutdown":
_log.info("Got REST API command: " + command + " Bye Bye...");
System.exit(0);
break;
case "Restart":
_log.info("Got REST API command: " + command + " Restarting...");
System.exit(1);
break;
default:
_log.info("Got unknown REST API command: " + command);
}
} else {
exchange.sendResponseHeaders(405, -1);// 405 Method Not Allowed
}
exchange.close();
}));
restserver.setExecutor(null); // creates a default executor
restserver.start();
_log.info("Listening for REST API commands on localhost" + ':' + RestServerPort);
}
public static Map<String, List<String>> splitQuery(String query) {
if (query == null || "".equals(query)) {
return Collections.emptyMap();
}
return Pattern.compile("&").splitAsStream(query)
.map(s -> Arrays.copyOf(s.split("="), 2))
.collect(groupingBy(s -> decode(s[0]), mapping(s -> decode(s[1]), toList())));
}
private static String decode(final String encoded) {
try {
return encoded == null ? null : URLDecoder.decode(encoded, "UTF-8");
} catch (final UnsupportedEncodingException e) {
throw new RuntimeException("UTF-8 is a required encoding", e);
}
}
импорты для шапки:
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.URLDecoder;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.Arrays;
import java.util.Collections;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toList;
import com.sun.net.httpserver.HttpServer;
пересобираем логин,
выключаем так:
curl localhost:8000/restapi?command=Shutdown
ну или любым другим способом (скрипт по крону, php на веб-сервере, и т.д.)
таким же макаром - выдаем донат, запускаем эвэнты, собираем статистику и т.д...
Последнее редактирование: