diff --git a/Server/src/net/simon987/server/GameServer.java b/Server/src/net/simon987/server/GameServer.java index 8a6b8de..02c16ea 100644 --- a/Server/src/net/simon987/server/GameServer.java +++ b/Server/src/net/simon987/server/GameServer.java @@ -104,10 +104,11 @@ public class GameServer implements Runnable { //Process user code for(User user : gameUniverse.getUsers()){ - user.getCpu().reset(); - user.getCpu().execute(); -// System.out.println(user.getCpu()); + if(user.getCpu() != null){ + user.getCpu().reset(); + user.getCpu().execute(); + } } //Process each worlds diff --git a/Server/src/net/simon987/server/game/GameUniverse.java b/Server/src/net/simon987/server/game/GameUniverse.java index dc14918..941b1ae 100644 --- a/Server/src/net/simon987/server/game/GameUniverse.java +++ b/Server/src/net/simon987/server/game/GameUniverse.java @@ -98,23 +98,24 @@ public class GameUniverse implements JSONSerialisable{ try { if(makeControlledUnit) { user = new User(); + user.setCpu(new CPU(GameServer.INSTANCE.getConfig(), user)); + user.setUserCode(GameServer.INSTANCE.getConfig().getString("new_user_code")); + + //Compile user code + AssemblyResult ar = new Assembler(user.getCpu().getInstructionSet(), user.getCpu().getRegisterSet(), + GameServer.INSTANCE.getConfig()).parse(user.getUserCode()); + + user.getCpu().getMemory().clear(); + + //Write assembled code to mem + user.getCpu().getMemory().write((short) ar.origin, ar.bytes, ar.bytes.length); + user.getCpu().setCodeSegmentOffset(ar.origin); + } else { user = new User(null); } user.setUsername(username); - user.setCpu(new CPU(GameServer.INSTANCE.getConfig(), user)); - user.setUserCode(GameServer.INSTANCE.getConfig().getString("new_user_code")); - - //Compile user code - AssemblyResult ar = new Assembler(user.getCpu().getInstructionSet(), user.getCpu().getRegisterSet(), - GameServer.INSTANCE.getConfig()).parse(user.getUserCode()); - - user.getCpu().getMemory().clear(); - - //Write assembled code to mem - user.getCpu().getMemory().write((short) ar.origin, ar.bytes, ar.bytes.length); - user.getCpu().setCodeSegmentOffset(ar.origin); users.add(user); diff --git a/Server/src/net/simon987/server/webserver/SocketServer.java b/Server/src/net/simon987/server/webserver/SocketServer.java index e897332..2c510e0 100644 --- a/Server/src/net/simon987/server/webserver/SocketServer.java +++ b/Server/src/net/simon987/server/webserver/SocketServer.java @@ -39,14 +39,13 @@ public class SocketServer extends WebSocketServer { @Override public void onOpen(WebSocket conn, ClientHandshake handshake) { LogManager.LOGGER.info("(WS) New Websocket connection " + conn.getRemoteSocketAddress()); - userManager.add(new OnlineUser(conn)); } @Override public void onClose(WebSocket conn, int code, String reason, boolean remote) { LogManager.LOGGER.info("(WS) Closed " + conn.getRemoteSocketAddress() + " with exit code " + code + " additional info: " + reason); - userManager.add(new OnlineUser(conn)); + userManager.remove(userManager.getUser(conn)); } @Override @@ -110,6 +109,8 @@ public class SocketServer extends WebSocketServer { @Override public void onError(WebSocket conn, Exception ex) { System.err.println("an error occured on connection " + conn.getRemoteSocketAddress() + ':' + ex); + userManager.remove(userManager.getUser(conn)); + ex.printStackTrace(); }