/
com/planet_ink/coffee_mud/Abilities/Common/
com/planet_ink/coffee_mud/Abilities/Diseases/
com/planet_ink/coffee_mud/Abilities/Druid/
com/planet_ink/coffee_mud/Abilities/Fighter/
com/planet_ink/coffee_mud/Abilities/Languages/
com/planet_ink/coffee_mud/Abilities/Misc/
com/planet_ink/coffee_mud/Abilities/Prayers/
com/planet_ink/coffee_mud/Abilities/Properties/
com/planet_ink/coffee_mud/Abilities/Skills/
com/planet_ink/coffee_mud/Abilities/Songs/
com/planet_ink/coffee_mud/Abilities/Spells/
com/planet_ink/coffee_mud/Abilities/Thief/
com/planet_ink/coffee_mud/Abilities/Traps/
com/planet_ink/coffee_mud/Behaviors/
com/planet_ink/coffee_mud/CharClasses/interfaces/
com/planet_ink/coffee_mud/Commands/
com/planet_ink/coffee_mud/Commands/interfaces/
com/planet_ink/coffee_mud/Common/
com/planet_ink/coffee_mud/Common/interfaces/
com/planet_ink/coffee_mud/Exits/interfaces/
com/planet_ink/coffee_mud/Items/Armor/
com/planet_ink/coffee_mud/Items/Basic/
com/planet_ink/coffee_mud/Items/CompTech/
com/planet_ink/coffee_mud/Items/MiscMagic/
com/planet_ink/coffee_mud/Items/Weapons/
com/planet_ink/coffee_mud/Items/interfaces/
com/planet_ink/coffee_mud/Libraries/
com/planet_ink/coffee_mud/Libraries/interfaces/
com/planet_ink/coffee_mud/Locales/
com/planet_ink/coffee_mud/MOBS/
com/planet_ink/coffee_mud/Races/
com/planet_ink/coffee_mud/Races/interfaces/
com/planet_ink/coffee_mud/WebMacros/
com/planet_ink/coffee_mud/WebMacros/interfaces/
com/planet_ink/coffee_mud/core/
com/planet_ink/coffee_mud/core/collections/
com/planet_ink/coffee_mud/core/interfaces/
com/planet_ink/coffee_mud/core/intermud/
com/planet_ink/coffee_mud/core/intermud/i3/
com/planet_ink/coffee_web/server/
com/planet_ink/siplet/applet/
lib/
resources/factions/
resources/fakedb/
resources/progs/autoplayer/
resources/quests/holidays/
web/
web/admin.templates/
web/admin/grinder/
web/admin/images/
web/clan.templates/
web/pub.templates/
web/pub/images/mxp/
web/pub/sounds/
web/pub/textedit/
package com.planet_ink.coffee_mud.Items.interfaces;

import java.util.List;

import com.planet_ink.coffee_mud.MOBS.interfaces.MOB;

/**
 * A computer is a particular type of electronics panel that holds
 * software, and has readers who monitor the messages this panel
 * generates, as well as use the Type command to enter data into
 * this panel's software.
 * @see Software
 * @see ElecPanel
 * @author Bo Zimmerman
 *
 */
public interface Computer extends ElecPanel
{
	/**
	 * Returns the list of Software objects installed in this computer.
	 * @see Software
	 * @return the list of Software objects installed in this computer
	 */
	public List<Software> getSoftware();
	
	/**
	 * Returns the list of mobs currently monitoring the output of this
	 * computers software.
	 * @return the list of mobs currently monitoring the output
	 */
	public List<MOB> getCurrentReaders();
	
	/**
	 * Forces all the current readers to "read" the computer, typically
	 * seeing the menu.
	 * @see Computer#getCurrentReaders()
	 * @see Computer#forceReadersSeeNew()
	 */
	public void forceReadersMenu();
	
	/**
	 * Forces all the current readers to see any new messages that 
	 * should be seen by anyone monitoring the computer.
	 * @see Computer#getCurrentReaders()
	 * @see Computer#forceReadersMenu()
	 */
	public void forceReadersSeeNew();
	
	/**
	 * Most software supports different levels of menu, and some software
	 * is even a sub-menu unto itself.  This method forces the system to
	 * recognize one of those menus as current.  The software takes it
	 * from there.
	 * @see Computer#getActiveMenu()
	 * @param internalName the menu to set as current and active
	 */
	public void setActiveMenu(String internalName);
	
	/**
	 * Most software supports different levels of menu, and some software
	 * is even a sub-menu unto itself.  This method returns the current
	 * active menu.
	 * @see Computer#setActiveMenu(String)
	 * @return internalName the menu to set as current and active
	 */
	public String getActiveMenu();
}