package net.sourceforge.pain.tinylib.logic.event;
import net.sourceforge.pain.*;
import net.sourceforge.pain.network.console.*;
import net.sourceforge.pain.tinylib.*;
import net.sourceforge.pain.tinylib.data.type.*;
import net.sourceforge.pain.tinylib.logic.fn.*;
import net.sourceforge.pain.util.*;
import java.util.*;
/**
 * PAiN  Date: 20.05.2003  Time: 1:11:25
 */
public class LogicReloadingEvent extends AbstractEvent {
    public Object execute(Object param) throws Exception {
        stopActiveSubShells();
        return null;
    }
    private void stopActiveSubShells() {
        // Moving all consoles to command mode!
        final UserConsoleManager cm = Codebase.getUserConsoleManager();
        for (Iterator it = cm.consoles().iterator(); it.hasNext();) {
            Console c = (Console) it.next();
            final Player p = c.getPlayer();
            if (p != null) {
                Log.debug(p.asInteractive().getName() + " raw:" + c.isRawMode());
                if (c.isRawMode() && c.getPlayer() != null) {
                    c.setCommandMode();
                    MessageOutFn.outln(c, "{wCode reloaded!{x");
                    ShowFn.showSpace(p.asReceptive(), p.asLocated().getLocation());
                } else {
                    c.setCommandMode();
                }
            } else {// player is just logging in
                MessageOutFn.outln(c, "\n{WAction aborted, server code is reloading!{x");
                c.setCommandMode();
                cm.closeConsole(c);
            }
        }
    }
}