mirror of
https://github.com/BlueMap-Minecraft/BlueMap.git
synced 2025-02-18 05:21:56 +01:00
Remove uneccesary lock, fix double server header, organize packages and class-names
This commit is contained in:
parent
0123041925
commit
892506f2f9
@ -38,6 +38,7 @@
|
|||||||
import de.bluecolored.bluemap.common.serverinterface.ServerEventListener;
|
import de.bluecolored.bluemap.common.serverinterface.ServerEventListener;
|
||||||
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
|
import de.bluecolored.bluemap.common.serverinterface.ServerInterface;
|
||||||
import de.bluecolored.bluemap.common.web.*;
|
import de.bluecolored.bluemap.common.web.*;
|
||||||
|
import de.bluecolored.bluemap.common.web.http.HttpServer;
|
||||||
import de.bluecolored.bluemap.core.debug.StateDumper;
|
import de.bluecolored.bluemap.core.debug.StateDumper;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.map.BmMap;
|
import de.bluecolored.bluemap.core.map.BmMap;
|
||||||
@ -81,7 +82,7 @@ public class Plugin implements ServerEventListener {
|
|||||||
private Map<String, BmMap> maps;
|
private Map<String, BmMap> maps;
|
||||||
|
|
||||||
private RenderManager renderManager;
|
private RenderManager renderManager;
|
||||||
private WebServer webServer;
|
private HttpServer webServer;
|
||||||
|
|
||||||
private BlueMapAPIImpl api;
|
private BlueMapAPIImpl api;
|
||||||
|
|
||||||
@ -192,7 +193,7 @@ private void load(@Nullable ResourcePack preloadedResourcePack) throws IOExcepti
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
webServer = new WebServer(routingRequestHandler);
|
webServer = new HttpServer(routingRequestHandler);
|
||||||
webServer.bind(new InetSocketAddress(
|
webServer.bind(new InetSocketAddress(
|
||||||
webserverConfig.resolveIp(),
|
webserverConfig.resolveIp(),
|
||||||
webserverConfig.getPort()
|
webserverConfig.getPort()
|
||||||
@ -581,7 +582,7 @@ public RenderManager getRenderManager() {
|
|||||||
return renderManager;
|
return renderManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WebServer getWebServer() {
|
public HttpServer getWebServer() {
|
||||||
return webServer;
|
return webServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
import de.bluecolored.bluemap.common.web.http.HttpRequestHandler;
|
import de.bluecolored.bluemap.common.web.http.HttpRequestHandler;
|
||||||
import de.bluecolored.bluemap.common.web.http.HttpResponse;
|
import de.bluecolored.bluemap.common.web.http.HttpResponse;
|
||||||
import de.bluecolored.bluemap.common.web.http.HttpStatusCode;
|
import de.bluecolored.bluemap.common.web.http.HttpStatusCode;
|
||||||
import de.bluecolored.bluemap.core.BlueMap;
|
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@ -43,7 +42,6 @@ public JsonDataRequestHandler(Supplier<String> dataSupplier) {
|
|||||||
@Override
|
@Override
|
||||||
public HttpResponse handle(HttpRequest request) {
|
public HttpResponse handle(HttpRequest request) {
|
||||||
HttpResponse response = new HttpResponse(HttpStatusCode.OK);
|
HttpResponse response = new HttpResponse(HttpStatusCode.OK);
|
||||||
response.addHeader("Server", "BlueMap v" + BlueMap.VERSION);
|
|
||||||
response.addHeader("Cache-Control", "no-cache");
|
response.addHeader("Cache-Control", "no-cache");
|
||||||
response.addHeader("Content-Type", "application/json");
|
response.addHeader("Content-Type", "application/json");
|
||||||
response.setData(dataSupplier.get());
|
response.setData(dataSupplier.get());
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
package de.bluecolored.bluemap.common.web;
|
|
||||||
|
|
||||||
import de.bluecolored.bluemap.common.web.http.HttpConnection;
|
|
||||||
import de.bluecolored.bluemap.common.web.http.HttpRequestHandler;
|
|
||||||
import de.bluecolored.bluemap.common.web.http.SelectionConsumer;
|
|
||||||
import de.bluecolored.bluemap.common.web.http.Server;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class WebServer extends Server {
|
|
||||||
|
|
||||||
private final HttpRequestHandler requestHandler;
|
|
||||||
|
|
||||||
public WebServer(HttpRequestHandler requestHandler) throws IOException {
|
|
||||||
this.requestHandler = requestHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SelectionConsumer createConnectionHandler() {
|
|
||||||
return new HttpConnection(requestHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -9,11 +9,9 @@
|
|||||||
import java.nio.channels.SelectableChannel;
|
import java.nio.channels.SelectableChannel;
|
||||||
import java.nio.channels.SelectionKey;
|
import java.nio.channels.SelectionKey;
|
||||||
import java.nio.channels.SocketChannel;
|
import java.nio.channels.SocketChannel;
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
|
||||||
|
|
||||||
public class HttpConnection implements SelectionConsumer {
|
public class HttpConnection implements SelectionConsumer {
|
||||||
|
|
||||||
private final ReentrantLock processingLock = new ReentrantLock();
|
|
||||||
private final HttpRequestHandler requestHandler;
|
private final HttpRequestHandler requestHandler;
|
||||||
private HttpRequest request;
|
private HttpRequest request;
|
||||||
private HttpResponse response;
|
private HttpResponse response;
|
||||||
@ -25,62 +23,56 @@ public HttpConnection(HttpRequestHandler requestHandler) {
|
|||||||
@Override
|
@Override
|
||||||
public void accept(SelectionKey selectionKey) {
|
public void accept(SelectionKey selectionKey) {
|
||||||
if (!selectionKey.isValid()) return;
|
if (!selectionKey.isValid()) return;
|
||||||
if (!processingLock.tryLock()) return;
|
|
||||||
|
SelectableChannel selChannel = selectionKey.channel();
|
||||||
|
|
||||||
|
if (!(selChannel instanceof SocketChannel)) return;
|
||||||
|
SocketChannel channel = (SocketChannel) selChannel;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
SelectableChannel selChannel = selectionKey.channel();
|
|
||||||
|
|
||||||
if (!(selChannel instanceof SocketChannel)) return;
|
if (request == null) {
|
||||||
SocketChannel channel = (SocketChannel) selChannel;
|
SocketAddress remote = channel.getRemoteAddress();
|
||||||
|
InetAddress remoteInet = null;
|
||||||
|
if (remote instanceof InetSocketAddress)
|
||||||
|
remoteInet = ((InetSocketAddress) remote).getAddress();
|
||||||
|
|
||||||
try {
|
request = new HttpRequest(remoteInet);
|
||||||
|
|
||||||
if (request == null) {
|
|
||||||
SocketAddress remote = channel.getRemoteAddress();
|
|
||||||
InetAddress remoteInet = null;
|
|
||||||
if (remote instanceof InetSocketAddress)
|
|
||||||
remoteInet = ((InetSocketAddress) remote).getAddress();
|
|
||||||
|
|
||||||
request = new HttpRequest(remoteInet);
|
|
||||||
}
|
|
||||||
|
|
||||||
// receive request
|
|
||||||
if (!request.write(channel)) {
|
|
||||||
if (!selectionKey.isValid()) return;
|
|
||||||
selectionKey.interestOps(SelectionKey.OP_READ);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// process request
|
|
||||||
if (response == null) {
|
|
||||||
this.response = requestHandler.handle(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!selectionKey.isValid()) return;
|
|
||||||
|
|
||||||
// send response
|
|
||||||
if (!response.read(channel)){
|
|
||||||
selectionKey.interestOps(SelectionKey.OP_WRITE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reset to accept new request
|
|
||||||
request.clear();
|
|
||||||
response.close();
|
|
||||||
response = null;
|
|
||||||
selectionKey.interestOps(SelectionKey.OP_READ);
|
|
||||||
|
|
||||||
} catch (IOException e) {
|
|
||||||
Logger.global.logDebug("Failed to process selection: " + e);
|
|
||||||
try {
|
|
||||||
channel.close();
|
|
||||||
} catch (IOException e2) {
|
|
||||||
Logger.global.logWarning("Failed to close channel" + e2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} finally {
|
// receive request
|
||||||
processingLock.unlock();
|
if (!request.write(channel)) {
|
||||||
|
if (!selectionKey.isValid()) return;
|
||||||
|
selectionKey.interestOps(SelectionKey.OP_READ);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// process request
|
||||||
|
if (response == null) {
|
||||||
|
this.response = requestHandler.handle(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!selectionKey.isValid()) return;
|
||||||
|
|
||||||
|
// send response
|
||||||
|
if (!response.read(channel)){
|
||||||
|
selectionKey.interestOps(SelectionKey.OP_WRITE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset to accept new request
|
||||||
|
request.clear();
|
||||||
|
response.close();
|
||||||
|
response = null;
|
||||||
|
selectionKey.interestOps(SelectionKey.OP_READ);
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
Logger.global.logDebug("Failed to process selection: " + e);
|
||||||
|
try {
|
||||||
|
channel.close();
|
||||||
|
} catch (IOException e2) {
|
||||||
|
Logger.global.logWarning("Failed to close channel" + e2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package de.bluecolored.bluemap.common.web.http;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class HttpServer extends Server {
|
||||||
|
|
||||||
|
private final HttpRequestHandler requestHandler;
|
||||||
|
|
||||||
|
public HttpServer(HttpRequestHandler requestHandler) throws IOException {
|
||||||
|
this.requestHandler = requestHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SelectionConsumer createConnectionHandler() {
|
||||||
|
return new HttpConnection(requestHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -40,6 +40,7 @@
|
|||||||
import de.bluecolored.bluemap.common.serverinterface.ServerWorld;
|
import de.bluecolored.bluemap.common.serverinterface.ServerWorld;
|
||||||
import de.bluecolored.bluemap.common.web.*;
|
import de.bluecolored.bluemap.common.web.*;
|
||||||
import de.bluecolored.bluemap.common.web.http.HttpRequestHandler;
|
import de.bluecolored.bluemap.common.web.http.HttpRequestHandler;
|
||||||
|
import de.bluecolored.bluemap.common.web.http.HttpServer;
|
||||||
import de.bluecolored.bluemap.core.MinecraftVersion;
|
import de.bluecolored.bluemap.core.MinecraftVersion;
|
||||||
import de.bluecolored.bluemap.core.logger.Logger;
|
import de.bluecolored.bluemap.core.logger.Logger;
|
||||||
import de.bluecolored.bluemap.core.logger.LoggerLogger;
|
import de.bluecolored.bluemap.core.logger.LoggerLogger;
|
||||||
@ -202,7 +203,7 @@ public void startWebserver(BlueMapService blueMap, boolean verbose) throws IOExc
|
|||||||
HttpRequestHandler handler = new BlueMapResponseModifier(routingRequestHandler);
|
HttpRequestHandler handler = new BlueMapResponseModifier(routingRequestHandler);
|
||||||
if (verbose) handler = new LoggingRequestHandler(handler);
|
if (verbose) handler = new LoggingRequestHandler(handler);
|
||||||
|
|
||||||
WebServer webServer = new WebServer(handler);
|
HttpServer webServer = new HttpServer(handler);
|
||||||
webServer.bind(new InetSocketAddress(
|
webServer.bind(new InetSocketAddress(
|
||||||
config.resolveIp(),
|
config.resolveIp(),
|
||||||
config.getPort()
|
config.getPort()
|
||||||
|
Loading…
Reference in New Issue
Block a user