package net.sourceforge.pain.network.guitool; import net.sourceforge.pain.*; import net.sourceforge.pain.util.*; import java.util.*; public final class GuiToolSessionManager extends PeriodOfTimeListener { public static final String MANAGEMENT_SERVER_EVENT = "guitool.GuiToolEvent"; private final ArrayList connections = new ArrayList(); private final GuiToolConnectionServer server; public GuiToolSessionManager(int port) { super(5, PERIOD_IN_PULSE); server = new GuiToolConnectionServer(this, port); } protected void onPeriod(int time) { final int nCons = connections.size(); for (int i = 0; i < nCons; i++) { GuiToolConnection c = (GuiToolConnection) connections.get(i); if (c.inputEvents.isEmpty()) { continue; } try { Core.processEvent(MANAGEMENT_SERVER_EVENT, c); } catch (Exception e) { Log.error(e); } } } void onConnect(GuiToolConnection c) { connections.add(c); } void onDisconnect(GuiToolConnection c) { connections.remove(c); } public void close() { while (!connections.isEmpty()) { GuiToolConnection connection = (GuiToolConnection) connections.remove(connections.size() - 1); connection.forceClose(); } server.stop(); } public void closeConnection(GuiToolConnection c) { c.forceClose(); // will calls back to onDisconnect } }