Editor upload & reload buttons are now working. Floppy upload & download working.

This commit is contained in:
simon
2018-04-29 14:00:50 -04:00
parent 315e33055e
commit 2c856aae80
16 changed files with 217 additions and 164 deletions

View File

@@ -154,7 +154,6 @@ public class GameServer implements Runnable {
GameEvent event = new TickEvent(gameUniverse.getTime());
eventDispatcher.dispatch(event); //Ignore cancellation
//Process user code
for (User user : gameUniverse.getUsers()) {
@@ -189,7 +188,7 @@ public class GameServer implements Runnable {
save();
}
// socketServer.tick();
socketServer.tick();
// LogManager.LOGGER.info("Processed " + gameUniverse.getWorldCount() + " worlds (" + updatedWorlds +
// " updated)");

View File

@@ -2,6 +2,7 @@ package net.simon987.server;
import net.simon987.server.logging.LogManager;
import net.simon987.server.web.WebServer;
import spark.Spark;
public class Main {
@@ -10,12 +11,15 @@ public class Main {
ServerConfiguration config = new ServerConfiguration("config.properties");
LogManager.initialize(config);
//Load
GameServer.INSTANCE.load();
(new Thread(GameServer.INSTANCE)).start();
//Web server
new WebServer(GameServer.INSTANCE.getConfig());
WebServer webServer = new WebServer(GameServer.INSTANCE.getConfig());
Spark.awaitInitialization();
GameServer.INSTANCE.setSocketServer(webServer.getSocketServer());
(new Thread(GameServer.INSTANCE)).start();
}
}

View File

@@ -0,0 +1,36 @@
package net.simon987.server.web;
import net.simon987.server.GameServer;
import net.simon987.server.logging.LogManager;
import spark.Request;
import spark.Response;
import spark.Route;
public class FloppyDownloadRoute implements Route {
@Override
public Object handle(Request request, Response response) {
String username = request.session().attribute("username");
if (username != null) {
response.header("Content-Type", "application/octet-stream");
response.header("Content-Disposition", "filename=\"floppy.bin\"");
try {
return GameServer.INSTANCE.getGameUniverse().getUser(username).getControlledUnit().getFloppyData().getBytes();
} catch (Exception e) {
String message = "Encountered exception while reading floppy data: " + e.getMessage();
LogManager.LOGGER.severe(message);
return message;
}
} else {
response.status(403);
return "Not logged in";
}
}
}

View File

@@ -0,0 +1,67 @@
package net.simon987.server.web;
import net.simon987.server.GameServer;
import net.simon987.server.logging.LogManager;
import spark.Request;
import spark.Response;
import spark.Route;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.InputStream;
public class FloppyUploadRoute implements Route {
@Override
public Object handle(Request request, Response response) {
String username = request.session().attribute("username");
if (username != null) {
try {
request.attribute("org.eclipse.jetty.multipartConfig",
new MultipartConfigElement("/tmp_floppy", 1474560L, -1L, 0));
try (InputStream is = request.raw().getPart("floppyData").getInputStream()) {
if (is.available() == 1474560) {
byte[] bytes = new byte[1474560];
int bytesRead = is.read(bytes);
if (bytesRead == 1474560) {
try {
GameServer.INSTANCE.getGameUniverse().getUser(username).getControlledUnit().getFloppyData().setBytes(bytes);
return "ok";
} catch (Exception e) {
String message = "Encountered exception while writing floppy data: " + e.getMessage();
LogManager.LOGGER.severe(message);
return message;
}
} else {
return "Couldn't read floppy file";
}
} else {
return "File size must be 1474560 bytes";
}
} catch (IOException | ServletException e) {
e.printStackTrace();
return "Error reading floppy file: " + e.getMessage();
}
} catch (IllegalStateException e) {
return "File exceeds maximum size";
}
} else {
response.status(403);
return "Not logged in";
}
}
}

View File

@@ -2,7 +2,6 @@ package net.simon987.server.web;
import net.simon987.server.ServerConfiguration;
import net.simon987.server.logging.LogManager;
import net.simon987.server.websocket.FloppyUploadRoute;
import net.simon987.server.websocket.SocketServer;
import org.apache.velocity.app.VelocityEngine;
import spark.Spark;
@@ -12,6 +11,8 @@ import java.util.Properties;
public class WebServer {
private SocketServer socketServer;
public WebServer(ServerConfiguration config) {
//Velocity config
@@ -36,7 +37,8 @@ public class WebServer {
LogManager.LOGGER.info("(Web) Enabled ssl");
}
Spark.webSocket("/socket", SocketServer.class);
socketServer = new SocketServer();
Spark.webSocket("/socket", socketServer);
Spark.get("/", new HomePage(), templateEngine);
Spark.get("/leaderboard", new LeaderBoardPage(), templateEngine);
@@ -49,8 +51,12 @@ public class WebServer {
Spark.post("/change_password", new ChangePasswordRoute());
Spark.get("/server_info", new ServerInfoRoute());
Spark.post("/floppy_upload", new FloppyUploadRoute());
Spark.get("/floppy_download", new FloppyDownloadRoute());
Spark.after((request, response) -> response.header("Content-Encoding", "gzip"));
}
public SocketServer getSocketServer() {
return socketServer;
}
}

View File

@@ -1,40 +0,0 @@
package net.simon987.server.websocket;
import net.simon987.server.GameServer;
import net.simon987.server.logging.LogManager;
import org.json.simple.JSONObject;
public class FloppyHandler implements MessageHandler {
SocketServerDatabase db = new SocketServerDatabase(GameServer.INSTANCE.getConfig());
@Override
public void handle(OnlineUser user, JSONObject json) {
if (json.get("t").equals("floppyDown")) {
LogManager.LOGGER.fine("(WS) Floppy download request from " + user.getUser().getUsername());
if (user.getUser().isGuest()) {
return;
}
if (user.getUser().getControlledUnit().getFloppyData() != null) {
byte[] bytes = user.getUser().getControlledUnit().getFloppyData().getBytes();
LogManager.LOGGER.severe("TODO FloppyHandler.handle()");
}
} else if (json.get("t").equals("floppyUp")) {
LogManager.LOGGER.fine("(WS) Floppy upload request from " + user.getUser().getUsername());
//Check newly uploaded file on the database
byte[] bytes = db.getFloppy(user.getUser().getUsername());
if (bytes != null) {
user.getUser().getControlledUnit().getFloppyData().setBytes(bytes);
}
}
}
}

View File

@@ -1,37 +0,0 @@
package net.simon987.server.websocket;
import spark.Request;
import spark.Response;
import spark.Route;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.InputStream;
public class FloppyUploadRoute implements Route {
@Override
public Object handle(Request request, Response response) {
try {
request.attribute("org.eclipse.jetty.multipartConfig",
new MultipartConfigElement("/tmp_floppy", 1474560L, -1L, 0));
try (InputStream is = request.raw().getPart("floppyData").getInputStream()) {
System.out.println(is.available());
// Use the input stream to create a file
} catch (IOException | ServletException e) {
e.printStackTrace();
}
} catch (IllegalStateException e) {
System.out.println(e.getMessage());
return "File exceeds maximum size";
}
return "mh";
}
}

View File

@@ -30,7 +30,6 @@ public class SocketServer {
messageDispatcher.addHandler(new CodeUploadHandler());
messageDispatcher.addHandler(new CodeRequestHandler());
messageDispatcher.addHandler(new KeypressHandler());
messageDispatcher.addHandler(new FloppyHandler());
messageDispatcher.addHandler(new DebugCommandHandler());
}