Skip to content

Commit a8b5b4b

Browse files
committed
Thread Limit
1 parent 5f59095 commit a8b5b4b

File tree

5 files changed

+64
-27
lines changed

5 files changed

+64
-27
lines changed

src/main/java/tk/fungy/wsformc/Command.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public boolean onCommand(CommandSender sender, org.bukkit.command.Command comman
161161
return true;
162162
}
163163
ws.stop();
164-
FileManager.setStringInConfig("WebServer.isRunning", String.valueOf(false));
164+
FileManager.setBooleanInConfig("WebServer.isRunning", false);
165165
if (!(ws.isAlive())) {
166166
sender.sendMessage(Colors.translate("&8[&cWebServer&8] &aWebserver has been Stopped!"));
167167
} else {

src/main/java/tk/fungy/wsformc/FileManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,11 @@ public String getStringFromConfig(String string) {
134134
config = new YamlConfiguration().loadConfiguration(configFile);
135135
} return config.getString(string);
136136
}
137+
public Integer getIntegerFromConfig(String integer) {
138+
if (config == null) {
139+
config = new YamlConfiguration().loadConfiguration(configFile);
140+
} return config.getInt(integer);
141+
}
137142
public boolean checkBooleanFromConfig(String key, Boolean string) {
138143
if (config == null) {
139144
config = new YamlConfiguration().loadConfiguration(configFile);

src/main/java/tk/fungy/wsformc/Main.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public void onEnable() {
3232
instance.getCommand("webserver").setExecutor(new Command());
3333
if (WebServer.running) {
3434
if (Command.ws == null) Command.ws = new WebServer();
35-
getLogger().info("Starting Webserbver.");
35+
getLogger().info("Starting Webserver.");
3636
Command.ws.start();
3737
}
3838
if (FileManager.config == null) {
@@ -44,13 +44,12 @@ public void onEnable() {
4444
}
4545
FileManager.setStringInConfig("Version", getDescription().getVersion());
4646

47-
int pluginId = 17696;
48-
Metrics metrics = new Metrics(Main.instance, pluginId);
47+
Metrics metrics = new Metrics(Main.instance, 17696);
4948

5049
Updater.startUpdater();
5150

5251
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") == null) {
53-
getLogger().warning("Could not find PlaceholderAPI! This plugin is required for WebServer placeholders.");
52+
getLogger().warning("Could not find PlaceholderAPI! This plugin is required for Web placeholders.");
5453
}
5554
}
5655

src/main/java/tk/fungy/wsformc/WebServer.java

Lines changed: 54 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@
33
import fi.iki.elonen.NanoHTTPD;
44
import me.clip.placeholderapi.PlaceholderAPI;
55
import org.bukkit.Bukkit;
6+
import org.bukkit.entity.Player;
67

78
import java.io.*;
89
import java.nio.file.NoSuchFileException;
910
import java.sql.Time;
1011
import java.text.SimpleDateFormat;
1112
import java.util.Date;
13+
import java.util.List;
1214
import java.util.Map;
15+
import java.util.concurrent.ExecutorService;
16+
import java.util.concurrent.Executors;
17+
import java.util.function.Supplier;
1318
import java.util.regex.Matcher;
1419
import java.util.regex.Pattern;
1520

@@ -87,25 +92,38 @@ private String getMimeType(String uri) {
8792

8893

8994
public void start() {
95+
int maxThreads = new FileManager().getIntegerFromConfig("WebServer.threads"); // maximum number of threads
96+
if (maxThreads == 0) {
9097
try {
9198
super.start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
92-
FileManager.setStringInConfig("WebServer.isRunning", String.valueOf(true));
93-
if (new FileManager().getBooleanFromConfig("WebServer.ssl")) {
94-
Main.getInstance().getLogger().warning("Running! https://" + new FileManager().getStringFromConfig("WebServer.domain") + ":" + Integer.valueOf(new FileManager().getStringFromConfig("WebServer.port")) + "/");
95-
} else {
96-
Main.getInstance().getLogger().warning("Running! http://" + new FileManager().getStringFromConfig("WebServer.domain") + ":" + Integer.valueOf(new FileManager().getStringFromConfig("WebServer.port")) + "/");
97-
}
98-
Main.tc.reset();
99-
Main.tc.start();
10099
} catch (IOException e) {
101100
Main.getInstance().getLogger().warning("Couldn't start server: " + e.getMessage());
102-
FileManager.setStringInConfig("WebServer.isRunning", String.valueOf(false));
101+
FileManager.setBooleanInConfig("WebServer.isRunning", false);
103102
}
103+
} else {
104+
ExecutorService executorService = Executors.newFixedThreadPool(maxThreads);
105+
executorService.submit(() -> {
106+
try {
107+
super.start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
108+
} catch (IOException e) {
109+
Main.getInstance().getLogger().warning("Couldn't start server: " + e.getMessage());
110+
FileManager.setBooleanInConfig("WebServer.isRunning", false);
111+
}
112+
});
113+
}
114+
FileManager.setBooleanInConfig("WebServer.isRunning", true);
115+
if (new FileManager().getBooleanFromConfig("WebServer.ssl")) {
116+
Main.getInstance().getLogger().warning("Running! https://" + new FileManager().getStringFromConfig("WebServer.domain") + ":" + Integer.valueOf(new FileManager().getStringFromConfig("WebServer.port")) + "/");
117+
} else {
118+
Main.getInstance().getLogger().warning("Running! http://" + new FileManager().getStringFromConfig("WebServer.domain") + ":" + Integer.valueOf(new FileManager().getStringFromConfig("WebServer.port")) + "/");
119+
}
120+
Main.tc.reset();
121+
Main.tc.start();
104122
}
105123
public void stop() {
106124
super.stop();
107125
Main.tc.stop();
108-
FileManager.setStringInConfig("WebServer.isRunning", String.valueOf(false));
126+
FileManager.setBooleanInConfig("WebServer.isRunning", false);
109127
if (!(super.isAlive())) {
110128
Main.getInstance().getLogger().warning("Webserver has been Stopped!");
111129
} else {
@@ -116,7 +134,7 @@ public void stop() {
116134
public Response serve(IHTTPSession session) {
117135
String uri = session.getUri().toLowerCase();
118136
String hostHeader = session.getHeaders().get("host");
119-
if (hostHeader == null || !hostHeader.contains(new FileManager().getStringFromConfig("WebServer.domain") + ":" + Integer.valueOf(new FileManager().getStringFromConfig("WebServer.port")))) {
137+
if (hostHeader == null || !hostHeader.contains(new FileManager().getStringFromConfig("WebServer.domain"))) {
120138
return newFixedLengthResponse(Response.Status.BAD_REQUEST, "text/plain", "Permanent Redirect to " + new FileManager().getStringFromConfig("WebServer.domain") + ":" + Integer.valueOf(new FileManager().getStringFromConfig("WebServer.port")));
121139
}
122140

@@ -126,21 +144,24 @@ public Response serve(IHTTPSession session) {
126144
String mimeType = getMimeType(uri);
127145
File file = new File(Main.instance.getDataFolder() + "/web/" + uri);
128146
try {
129-
try (FileWriter writer = new FileWriter(logFile, true)) {
130-
Map<String, String> headers = session.getHeaders();
131-
String referer = headers.get("referer");
132-
String agent = headers.get("user-agent");
133-
String ip = headers.get("remote-addr");
134-
String timeStamp = new SimpleDateFormat("dd-MM-yyyy ss:mm:HH").format(new Date());
135-
writer.append(timeStamp + " " + session.getMethod() + " " + session.getUri() + " " + ip + " " + agent + " " + referer + "\n");
136-
} catch (NoSuchFileException e) {
137-
if (!logsFolder.exists()) logsFolder.mkdir();
138-
} catch (IOException e) {
139-
throw new RuntimeException(e);
147+
if (new FileManager().getBooleanFromConfig("WebServer.accessLog")) {
148+
try (FileWriter writer = new FileWriter(logFile, true)) {
149+
Map<String, String> headers = session.getHeaders();
150+
String referer = headers.get("referer");
151+
String agent = headers.get("user-agent");
152+
String ip = headers.get("remote-addr");
153+
String timeStamp = new SimpleDateFormat("dd-MM-yyyy ss:mm:HH").format(new Date());
154+
writer.append(timeStamp + " " + session.getMethod() + " " + session.getUri() + " " + ip + " " + agent + " " + referer + "\n");
155+
} catch (NoSuchFileException e) {
156+
if (!logsFolder.exists()) logsFolder.mkdir();
157+
} catch (IOException e) {
158+
throw new RuntimeException(e);
159+
}
140160
}
141161
if (Method.GET.equals(method) && "/".equals(uri)) file = new File(Main.instance.getDataFolder() + "/web/" + "index.html".toLowerCase());
142162

143163
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
164+
144165
StringBuilder fileContent = new StringBuilder();
145166
try (BufferedReader reader = new BufferedReader(new FileReader(Main.instance.getDataFolder() + "/web/" + uri.toLowerCase()))) {
146167
String line;
@@ -156,6 +177,7 @@ public Response serve(IHTTPSession session) {
156177
Pattern pattern = Pattern.compile(placeholderRegex);
157178
Matcher matcher = pattern.matcher(fileContent);
158179
StringBuffer modifiedContentBuffer = new StringBuffer();
180+
159181
while (matcher.find()) {
160182
String placeholder = matcher.group(1);
161183
String resolvedValue = PlaceholderAPI.setPlaceholders(null, "%" + placeholder + "%");
@@ -178,4 +200,14 @@ public Response serve(IHTTPSession session) {
178200
throw new RuntimeException(e);
179201
}
180202
}
203+
private String getQueryValue(String query, String paramName) {
204+
String[] params = query.split("&");
205+
for (String param : params) {
206+
String[] parts = param.split("=");
207+
if (parts.length == 2 && parts[0].equals(paramName)) {
208+
return parts[1];
209+
}
210+
}
211+
return null;
212+
}
181213
}

src/main/resources/config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ WebServer:
3434
domain: "CHANGE_ME" # Domain of your server, default is ip of your server.
3535
ssl: false # toggle: true/false, set this to true only if you have generated certificate and webserver pointed to domain.
3636
accessLog: true # toggle: true/false, acceslog from website.
37+
threads: 10 # Maximum number of threads, 0 for unlimited
3738

3839
No-Permission: "&cYou dont have permissions to do this command"
3940
Version: "1.3.2" # Do not edit this line!

0 commit comments

Comments
 (0)