/
codebase/src/net/sourceforge/pain/admin/console/command/
codebase/src/net/sourceforge/pain/data/role/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/util/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
mudlibs/tinylib/
mudlibs/tinylib/area/
mudlibs/tinylib/etc/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/prototype/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/deploy/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/fn/util/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/impl/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/command/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/reset/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/shutdown/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/social/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/util/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
package net.sourceforge.pain.network.guitool;

import net.sourceforge.pain.*;
import net.sourceforge.pain.util.*;

import java.util.*;

public final class GuiToolSessionManager extends PulsePeriodListener {
    public static final String MANAGEMENT_SERVER_EVENT = "guitool.GuiToolEvent";

    private final ArrayList connections = new ArrayList();
    private final GuiToolServer server;

    public GuiToolSessionManager(int port) {
        super(10, PERIOD_IN_PULSE);
        server = new GuiToolServer(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 {
                Codebase.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
    }

}