From c8fc952ffca7600ec0ad583b84435518cc016132 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Mon, 1 May 2017 14:42:16 +0300 Subject: [PATCH] =?UTF-8?q?MCSM:=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B5=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mcserver-manager/build.gradle | 2 +- .../main/java/asys/mcsmanager/Activator.java | 2 +- .../java/asys/mcsmanager/MCSM_WebModule.java | 40 ++++++++++++++----- .../src/main/resources/components.js | 18 +-------- mcserver-manager/src/main/resources/module.js | 25 +++++++++++- 5 files changed, 58 insertions(+), 29 deletions(-) diff --git a/mcserver-manager/build.gradle b/mcserver-manager/build.gradle index d785d31..f7a5b4e 100644 --- a/mcserver-manager/build.gradle +++ b/mcserver-manager/build.gradle @@ -1,5 +1,5 @@ group = 'asys' -version = '0.8-SNAPSHOT' +version = '0.8.1-SNAPSHOT' apply plugin: 'osgi' diff --git a/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java b/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java index 5c2c2c0..91d7f86 100644 --- a/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java +++ b/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java @@ -31,7 +31,7 @@ public class Activator implements BundleActivator, ServiceListener { Manager manager = new Manager(); - module = new MCSM_WebModule(); + module = new MCSM_WebModule(manager); logger.debug("Get service: {}", Webinterface.class); serviceTracker = new ServiceTracker<>(context, Webinterface.class, null); diff --git a/mcserver-manager/src/main/java/asys/mcsmanager/MCSM_WebModule.java b/mcserver-manager/src/main/java/asys/mcsmanager/MCSM_WebModule.java index 3dc5cb8..c0becc2 100644 --- a/mcserver-manager/src/main/java/asys/mcsmanager/MCSM_WebModule.java +++ b/mcserver-manager/src/main/java/asys/mcsmanager/MCSM_WebModule.java @@ -5,6 +5,8 @@ package asys.mcsmanager; import asys.webinterface.api.WebModule; +import com.google.gson.Gson; +import com.google.gson.JsonElement; import com.sun.net.httpserver.HttpExchange; import java.io.IOException; @@ -15,8 +17,15 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class MCSM_WebModule extends WebModule { + private static final Gson GSON = new Gson(); + private Manager manager; private final String MODULE_NAME = "mcsmanager"; - private final Pattern URL_PATTERN_JS = Pattern.compile("/"+MODULE_NAME+"/(\\w+)\\.js"); + private final String MODULE_URL = "/"+MODULE_NAME; + private final Pattern URL_PATTERN_JS = Pattern.compile(MODULE_URL+"/(\\w+)\\.js"); + + MCSM_WebModule(Manager manager) { + this.manager = manager; + } @Override public String getName() { @@ -38,18 +47,31 @@ public class MCSM_WebModule extends WebModule { @Override public boolean handle(HttpExchange httpExchange) throws IOException { String urlPath = httpExchange.getRequestURI().getPath(); - Matcher matcher = URL_PATTERN_JS.matcher(urlPath); - if (matcher.find()) { - InputStream stream = getClass().getResourceAsStream("/"+matcher.group(1)+".js"); - if (stream == null) { - this.sendHttpCode(httpExchange, 404, "not found"); + if (urlPath.equals(MODULE_URL+"/servers.json")) { + return handleServersJson(httpExchange); + } else { + Matcher matcher = URL_PATTERN_JS.matcher(urlPath); + if (matcher.find()) { + InputStream stream = getClass().getResourceAsStream("/" + matcher.group(1) + ".js"); + if (stream == null) { + this.sendHttpCode(httpExchange, 404, "not found"); + return true; + } + httpExchange.getResponseHeaders().add("Content-Type", "text/javascript;charset=utf-8"); + this.sendContent(httpExchange, 0, stream); return true; } - httpExchange.getResponseHeaders().add("Content-Type", "text/javascript;charset=utf-8"); - this.sendContent(httpExchange, 0, stream); - return true; } return false; } + + private boolean handleServersJson(HttpExchange httpExchange) throws IOException { + this.sendJson(httpExchange, serverList()); + return true; + } + + private JsonElement serverList() { + return GSON.toJsonTree(manager.getServerList()); + } } diff --git a/mcserver-manager/src/main/resources/components.js b/mcserver-manager/src/main/resources/components.js index 545eec6..a5ec7be 100644 --- a/mcserver-manager/src/main/resources/components.js +++ b/mcserver-manager/src/main/resources/components.js @@ -55,21 +55,13 @@ var NvLineChart = React.createClass({ var ServerListItem = React.createClass({ render: function(){ - var status; - if (this.props.stopped) { - status = ce('span', {className: 'label label-danger'}, 'остановлен'); - } else { - status = ce('span', {className: 'label label-primary'}, this.props.players); - } - return( ce('a', {className: 'list-group-item clearfix' + (this.props.active ? ' active' : ''), href: '#'}, ce('span', {style: {'padding-top': '15px'}}, ce('span', {className: 'glyphicon glyphicon-tasks'}), nbsp, this.props.title - ), - ce('span', {className: 'pull-right'}, status) + ) ) ) } @@ -77,12 +69,6 @@ var ServerListItem = React.createClass({ var ServerList = React.createClass({ render: function(){return( - ce('div', {className: 'list-group'}, - ce(ServerListItem, {title: 'Server 1 [hub-1]', players: 42}), - ce(ServerListItem, {title: 'Server 2 [skywars-1]', players: 6, active: true}), - ce(ServerListItem, {title: 'Server 3 [bedwars-3]', players: 23}), - ce(ServerListItem, {title: 'Server 4', stopped: true}), - ce(ServerListItem, {title: 'Server 5', stopped: true}) - ) + ce('div', {className: 'list-group'}, this.props.children) )} }); diff --git a/mcserver-manager/src/main/resources/module.js b/mcserver-manager/src/main/resources/module.js index c743700..5edfbf0 100644 --- a/mcserver-manager/src/main/resources/module.js +++ b/mcserver-manager/src/main/resources/module.js @@ -14,8 +14,22 @@ var ContentModule = React.createClass({ style.onerror = fnError; document.body.appendChild(style); }, + requestServerList: function() { + var _this = this; + fetch('/mcsmanager/servers.json') + .then(function(response) { + response.json().then(function(data) { + console.debug(data); + _this.setState({serverList: data}) + }); + }) + .catch(function(err){ + console.error(err); + }); + }, getInitialState: function(){return{ - nvScriptReady: 0 + nvScriptReady: 0, + serverList: [] }}, componentWillMount: function(){ var _this = this; @@ -36,12 +50,19 @@ var ContentModule = React.createClass({ }, function(){ _this.setState({nvScriptReady: -5}); console.error('d3 - error'); } ); + + this.requestServerList(); }, render: function(){ var element; if (this.state.nvScriptReady === 3) { + var serverListItems = []; + this.state.serverList.forEach(function(item){ + serverListItems.push(ce(ServerListItem, {title: item})); + }); + element = ce('div', {className: 'row'}, - ce('div', {className: 'col-md-4'}, ce(ServerList)), + ce('div', {className: 'col-md-4'}, ce(ServerList, null, serverListItems)), ce('div', {className: 'col-md-8'}, ce('div', {className: 'pull-right'}, ce('div', {className: 'btn-group'},