/* * 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) { } }