Files
CrossJeeves/src/com/flaremicro/crossjeeves/net/ServerHandler.java
Flare Microsystems 16b66b6094 Add more netcode
2024-11-13 08:49:21 -08:00

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());
}
}