96 lines
2.7 KiB
Java
96 lines
2.7 KiB
Java
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());
|
|
}
|
|
|
|
}
|