/*
* Created by Andrey Cherkashin (acherkashin)
* http://acherkashin.me
*
* License
* Copyright (c) 2015 Andrey Cherkashin
* The project released under the MIT license: http://opensource.org/licenses/MIT
*/
package ragefist.packets;
import com.juniform.JUniformObject;
import ragefist.core.ProcessorTask;
import ragefist.core.distribution.DistributedServerController.DistributedServerControllerAPI;
import ragefist.core.distribution.DistributedServerPacketHandler;
import ragefist.core.network.Connection;
import ragefist.packets.console.Exit;
import ragefist.packets.console.Help;
import ragefist.packets.console.Memory;
import ragefist.packets.console.Status;
/**
*
* @author acherkashin
*/
public class PacketHandlerConsole extends DistributedServerPacketHandler
{
private final IncomingPacket.IncomingPacketBuilder _packetBuilder;
public PacketHandlerConsole(DistributedServerControllerAPI serverControllerAPI) {
super(serverControllerAPI);
_packetBuilder = new IncomingPacket.IncomingPacketBuilder();
_packetBuilder.packetHandler = this;
}
public Class<? extends IncomingPacket> getPacketClassForAction(String action) throws IncomingPacketException {
switch(action) {
default:
throw new IncomingPacketException("ERROR_UNKNOWN_ACTION");
case "help":
return Help.class;
case "status":
return Status.class;
case "memory":
return Memory.class;
case "exit":
return Exit.class;
}
}
@Override
public void handleConnection(Connection connection) {
}
@Override
public void handlePacket(JUniformObject packet, Connection connection) {
Integer sq = null;
try {
String packetData = packet.toString().trim().replaceAll(" {2,}", " ");
String[] args = packetData.split(" ");
if (args.length == 0) {
throw new IncomingPacketException("ERROR_NULL_PACKET");
}
String action = args[0].toLowerCase();
_packetBuilder.packet = packet;
_packetBuilder.action = action;
_packetBuilder.sq = 0; // ignoring
_packetBuilder.connection = connection;
// CREATE A PACKET
Class<? extends IncomingPacket> packetClass = getPacketClassForAction(action);
IncomingPacket packetExecutor = _packetBuilder.build(packetClass);
// EXECUTING
packetExecutor.run();
}
catch (IncomingPacketException ex) {
connection.sendPacket(new JUniformObject(ex.getCode() + ", " + ex.getMessage()));
}
}
@Override
public void whenTaskIsFinished(ProcessorTask task) {
}
@Override
public void whenIncomingPacketIsFinished(IncomingPacket packet, boolean status, Object responseData) {
}
}