/
codebase/
codebase/area/
codebase/doc/
codebase/etc/
codebase/src/net/sourceforge/pain/data/trigger/
codebase/src/net/sourceforge/pain/logic/
codebase/src/net/sourceforge/pain/logic/affect/
codebase/src/net/sourceforge/pain/logic/event/
codebase/src/net/sourceforge/pain/logic/event/deploy/
codebase/src/net/sourceforge/pain/logic/event/guitool/
codebase/src/net/sourceforge/pain/logic/event/guitool/event/
codebase/src/net/sourceforge/pain/logic/fn/util/
codebase/src/net/sourceforge/pain/logic/trigger/
codebase/src/net/sourceforge/pain/logic/trigger/impl/
codebase/src/net/sourceforge/pain/network/console/
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/plugin/command/
codebase/src/net/sourceforge/pain/plugin/reset/
codebase/src/net/sourceforge/pain/plugin/shutdown/
codebase/src/net/sourceforge/pain/plugin/social/
codebase/src/net/sourceforge/pain/util/
db/doc/javadoc/resources/
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/
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 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
	}

}