Files
Much-Assembly-Required/Server/src/main/java/net/simon987/server/webserver/CodeUploadHandler.java

47 lines
1.6 KiB
Java

package net.simon987.server.webserver;
import net.simon987.server.GameServer;
import net.simon987.server.assembly.Assembler;
import net.simon987.server.assembly.AssemblyResult;
import net.simon987.server.logging.LogManager;
import org.json.simple.JSONObject;
public class CodeUploadHandler implements MessageHandler {
@Override
public void handle(OnlineUser user, JSONObject json) {
if (json.get("t").equals("uploadCode")) {
LogManager.LOGGER.info("(WS) Code upload from " + user.getUser().getUsername());
if (user.isGuest()) {
//Ignore
} else {
//TODO Should we wait at the end of the tick to modify the CPU ?
user.getUser().setUserCode((String) json.get("code"));
AssemblyResult ar = new Assembler(user.getUser().getCpu().getInstructionSet(),
user.getUser().getCpu().getRegisterSet(),
GameServer.INSTANCE.getConfig()).parse(user.getUser().getUserCode());
user.getUser().getCpu().getMemory().clear();
//Write assembled code to mem
char[] assembledCode = ar.getWords();
user.getUser().getCpu().getMemory().write((char) ar.origin, assembledCode, 0, assembledCode.length);
user.getUser().getCpu().setCodeSegmentOffset(ar.getCodeSegmentOffset());
JSONObject response = new JSONObject();
response.put("t", "codeResponse");
response.put("bytes", ar.bytes.length);
user.getWebSocket().send(response.toJSONString());
}
}
}
}