package net.sourceforge.pain.logic.event.guitool;
import net.sourceforge.pain.*;
import net.sourceforge.pain.data.*;
import net.sourceforge.pain.logic.event.*;
import net.sourceforge.pain.network.guitool.*;
import net.sourceforge.pain.util.*;
public class GuiToolEvent extends AbstractEvent {
public Object execute(Object param) throws Exception {
GuiToolConnection c = (GuiToolConnection) param;
GTNetPacket packet = (GTNetPacket) c.inputEvents.removeFirst();
try {
if (packet == null) {
Log.warn("GTNetPacket is null??");
return null;
}
if (c.guiAdminId == null) {
if (!"Login".equals(packet.eventClassName)) {
processFailedEvent(c, "Not logged in", packet.sequence_id);
return null;
}
}
GuiEventHandler handler = getGuiEventHandler(packet);
if (handler == null) {
processFailedEvent(c, "Event handler is not found:" + packet.eventClassName, packet.sequence_id);
} else {
handler.connection = c;
handler.admin = c.guiAdminId == null ? null : (GuiToolAdmin) Core.getDB().getObject(c.guiAdminId);
handler.processEvent();
}
} catch (Exception e) {
Log.error(e);
processFailedEvent(c, "Internal Error:" + e.getMessage(), packet.sequence_id);
}
return null;
}
private GuiEventHandler getGuiEventHandler(GTNetPacket packet) {
try {
GuiEventHandler h = (GuiEventHandler) Class.forName("net.sourceforge.pain.logic.event.guitool.event." + packet.eventClassName).newInstance();
h.packet = packet;
return h;
} catch (Exception e) {
Log.error(e);
}
return null;
}
public static void processFailedEvent(GuiToolConnection c, Object note, int sequenceId) {
c.send(new GTNetPacket("ERROR", note, sequenceId));
}
public static void sendInfoMessage(GuiToolConnection c, Object message, int sequenceId) {
c.send(new GTNetPacket("INFO", message, sequenceId));
}
}