mirror of
https://github.com/simon987/Much-Assembly-Required.git
synced 2025-12-13 14:49:03 +00:00
Added basic floppy drives #3.
This commit is contained in:
@@ -55,7 +55,7 @@ public class Memory implements Target, JSONSerialisable {
|
||||
/**
|
||||
* Write x words from an array at an offset
|
||||
*/
|
||||
public boolean write(int offset, byte[] bytes, int count) {
|
||||
public boolean write(int offset, byte[] bytes, int srcOffset, int count) {
|
||||
|
||||
offset = (char)offset * 2;
|
||||
|
||||
@@ -64,7 +64,7 @@ public class Memory implements Target, JSONSerialisable {
|
||||
return false;
|
||||
}
|
||||
|
||||
System.arraycopy(bytes, 0, this.bytes, offset, count);
|
||||
System.arraycopy(bytes, srcOffset, this.bytes, offset, count);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -122,18 +122,6 @@ public class Memory implements Target, JSONSerialisable {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
//To deflate
|
||||
|
||||
/*
|
||||
ByteArrayOutputStream stream2 = new ByteArrayOutputStream();
|
||||
Inflater decompresser = new Inflater(true);
|
||||
InflaterOutputStream inflaterOutputStream = new InflaterOutputStream(stream2, decompresser);
|
||||
inflaterOutputStream.write(output);
|
||||
inflaterOutputStream.close();
|
||||
byte[] output2 = stream2.toByteArray();
|
||||
*/
|
||||
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
@@ -157,4 +145,8 @@ public class Memory implements Target, JSONSerialisable {
|
||||
|
||||
return memory;
|
||||
}
|
||||
|
||||
public void setBytes(byte[] bytes) {
|
||||
this.bytes = bytes;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.simon987.server.game;
|
||||
|
||||
import net.simon987.server.assembly.Memory;
|
||||
import net.simon987.server.user.User;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -14,4 +15,6 @@ public interface ControllableUnit {
|
||||
|
||||
ArrayList<Integer> getKeyboardBuffer();
|
||||
|
||||
Memory getFloppyData();
|
||||
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public class GameUniverse implements JSONSerialisable{
|
||||
|
||||
private int nextObjectId = 0;
|
||||
|
||||
private int maxWidth = 3; //0xFFFF
|
||||
private int maxWidth = 0xFFFF;
|
||||
|
||||
public GameUniverse(ServerConfiguration config) {
|
||||
|
||||
@@ -113,9 +113,11 @@ public class GameUniverse implements JSONSerialisable{
|
||||
user.getCpu().getMemory().clear();
|
||||
|
||||
//Write assembled code to mem
|
||||
user.getCpu().getMemory().write((short) ar.origin, ar.bytes, ar.bytes.length);
|
||||
user.getCpu().getMemory().write((short) ar.origin, ar.bytes, 0, ar.bytes.length);
|
||||
user.getCpu().setCodeSegmentOffset(ar.origin);
|
||||
|
||||
//Init
|
||||
|
||||
} else {
|
||||
user = new User(null);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public class CodeUploadHandler implements MessageHandler {
|
||||
user.getUser().getCpu().getMemory().clear();
|
||||
|
||||
//Write assembled code to mem
|
||||
user.getUser().getCpu().getMemory().write((char) ar.origin, ar.bytes, ar.bytes.length);
|
||||
user.getUser().getCpu().getMemory().write((char) ar.origin, ar.bytes, 0, ar.bytes.length);
|
||||
user.getUser().getCpu().setCodeSegmentOffset(ar.origin);
|
||||
|
||||
JSONObject response = new JSONObject();
|
||||
|
||||
36
Server/src/net/simon987/server/webserver/FloppyHandler.java
Normal file
36
Server/src/net/simon987/server/webserver/FloppyHandler.java
Normal file
@@ -0,0 +1,36 @@
|
||||
package net.simon987.server.webserver;
|
||||
|
||||
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.info("(WS) Floppy download request from " + user.getUser().getUsername());
|
||||
|
||||
|
||||
//floppy
|
||||
byte[] bytes = user.getUser().getControlledUnit().getFloppyData().getBytes();
|
||||
|
||||
user.getWebSocket().send(bytes);
|
||||
|
||||
} else if (json.get("t").equals("floppyUp")) {
|
||||
|
||||
LogManager.LOGGER.info("(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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -68,6 +68,7 @@ public class SocketServer extends WebSocketServer {
|
||||
messageEventDispatcher.addHandler(new CodeUploadHandler());
|
||||
messageEventDispatcher.addHandler(new CodeRequestHandler());
|
||||
messageEventDispatcher.addHandler(new KeypressHandler());
|
||||
messageEventDispatcher.addHandler(new FloppyHandler());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -4,10 +4,7 @@ import net.simon987.server.ServerConfiguration;
|
||||
import net.simon987.server.io.DatabaseManager;
|
||||
import net.simon987.server.logging.LogManager;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.*;
|
||||
|
||||
class SocketServerDatabase extends DatabaseManager {
|
||||
|
||||
@@ -48,4 +45,39 @@ class SocketServerDatabase extends DatabaseManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
byte[] getFloppy(String username) {
|
||||
|
||||
Connection connection = null;
|
||||
try {
|
||||
connection = getConnection();
|
||||
|
||||
PreparedStatement p = connection.prepareStatement("SELECT floppyData FROM mar_user WHERE username=?");
|
||||
p.setString(1, username);
|
||||
|
||||
ResultSet rs = p.executeQuery();
|
||||
|
||||
if (rs.next()) {
|
||||
Blob blob = rs.getBlob("floppyData");
|
||||
|
||||
if (blob != null) {
|
||||
return blob.getBytes(1, (int) blob.length() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
LogManager.LOGGER.severe("MySQL Error " + e.getErrorCode() + ": " + e.getMessage());
|
||||
|
||||
} finally {
|
||||
try {
|
||||
connection.close();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -36,14 +36,14 @@ public class MemoryTest {
|
||||
Memory memory = new Memory(memorySize);
|
||||
|
||||
|
||||
assertTrue(memory.write(0, new byte[memorySize], memorySize));
|
||||
assertFalse(memory.write(0, new byte[memorySize], memorySize + 1));
|
||||
assertFalse(memory.write(0, new byte[memorySize], -1));
|
||||
assertFalse(memory.write(-1, new byte[memorySize], 10));
|
||||
assertTrue(memory.write(0, new byte[memorySize], 0, memorySize));
|
||||
assertFalse(memory.write(0, new byte[memorySize], 0, memorySize + 1));
|
||||
assertFalse(memory.write(0, new byte[memorySize], 0, -1));
|
||||
assertFalse(memory.write(-1, new byte[memorySize], 0, 10));
|
||||
|
||||
assertFalse(memory.write(memorySize / 2, new byte[15], 1));
|
||||
assertFalse(memory.write((memorySize / 2) - 5, new byte[11], 11));
|
||||
assertTrue(memory.write((memorySize / 2) - 5, new byte[11], 10));
|
||||
assertFalse(memory.write(memorySize / 2, new byte[15], 0, 1));
|
||||
assertFalse(memory.write((memorySize / 2) - 5, new byte[11], 0, 11));
|
||||
assertTrue(memory.write((memorySize / 2) - 5, new byte[11], 0, 10));
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user