package com.flaremicro.crossjeeves.net; import static com.flaremicro.crossjeeves.net.ErrorCodes.*; import java.io.File; import java.io.IOException; import java.net.Socket; import java.util.Properties; import java.util.Random; import com.flaremicro.crossjeeves.CrossJeevesHost; import com.flaremicro.crossjeeves.ScriptProcessor; import com.flaremicro.crossjeeves.net.packet.Packet; import com.flaremicro.crossjeeves.net.packet.Packet0Identify; import com.flaremicro.crossjeeves.net.packet.Packet127KeepAlive; import com.flaremicro.crossjeeves.net.packet.Packet1Status; import com.flaremicro.crossjeeves.net.packet.Packet2Script; import com.flaremicro.crossjeeves.net.packet.Packet3Clone; import com.flaremicro.crossjeeves.net.packet.Packet5Artifact; import com.flaremicro.crossjeeves.net.packet.Packet4FileData; import com.flaremicro.crossjeeves.net.packet.Packet6Disconnect; public class ServerHandler extends NetworkHandler { private CrossJeevesHost host; private ScriptProcessor scriptProcessor; private File workspace = new File("./workspace/"+new Random().nextLong()+"/"); public ServerHandler(Socket socket, CrossJeevesHost host, Properties properties) throws IOException { super(socket); this.host = host; this.scriptProcessor = new ScriptProcessor(this, workspace, properties); } @Override protected void doDisconnect(int exitCode) { //scriptProcessor.terminate(); host.removeConnection(this); super.doDisconnect(exitCode); } @Override public void handlePacket(Packet packet) { disconnect(INVALID_PACKET_RECIEVED.id, "Recieved invalid packet " + packet.getId() + " (Unknown)"); } @Override public void handlePacket(Packet0Identify packet) { enqueue(new Packet0Identify(0)); } @Override public void handlePacket(Packet1Status packet) { } @Override public void handlePacket(Packet2Script packet) { scriptProcessor.processAsync(packet.script); } @Override public void handlePacket(Packet3Clone packet) { disconnect(INVALID_PACKET_RECIEVED.id, "Recieved invalid packet " + packet.getId() + " (Clone)"); } @Override public void handlePacket(Packet4FileData packet) { try { this.appendFile(packet.getFileId(), packet.getFileChunk()); } catch (IOException e) { e.printStackTrace(); disconnect(FILE_DOWNLOAD_FAILURE.id, "Failed to download transferred file"); } } @Override public void handlePacket(Packet5Artifact packet) { disconnect(INVALID_PACKET_RECIEVED.id, "Recieved invalid packet " + packet.getId() + " (Artifact)"); } @Override public void handlePacket(Packet127KeepAlive packet) { } @Override public void handlePacket(Packet6Disconnect packet) { System.out.printf("Disconnect %d: %s%n", packet.getCode(), packet.getReason()); doDisconnect(packet.getCode()); } }