key0-96/
key0-96/doc/key/
key0-96/doc/key/credits/
key0-96/doc/key/developers/
key0-96/doc/key/developers/resources/
key0-96/setup/caves/
key0-96/setup/help/
key0-96/setup/ruins/
key0-96/src/
key0-96/src/commands/
key0-96/src/events/
key0-96/src/hack/
key0-96/src/sql/
key0-96/src/swing/
key0-96/src/talker/forest/
key0-96/src/talker/objects/
key0-96/src/terminals/
/*
**               j###t  ########## ####   ####
**              j###t   ########## ####   ####
**             j###T               "###L J###"
**          ######P'    ##########  #########
**          ######k,    ##########   T######T
**          ####~###L   ####
**          #### q###L  ##########   .#####
**          ####  \###L ##########   #####"
**
**  Class History
**  
**  Date        Name         Description
**  ---------|------------|-----------------------------------------------
**  09Jul97     merlin       created this command
**
*/

package key.commands;

import key.*;
import java.io.IOException;
import java.util.StringTokenizer;

/**
  *  This command is intended to change the players context to
  *  the site specified in the argument
 */
public class RefSite extends Command
{
	public RefSite()
	{
		setKey( "site" );
		usage = "<site> [ newbieban | siteban | unban | display ]";
	}

	public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
	{
		if( args.hasMoreTokens() )
		{
			Network sites = Key.getInternet();
			String siteToBan = args.nextToken();
			StringTokenizer st = new StringTokenizer( siteToBan, "." );
			Object o = null;
			Integer addr;
			boolean first = true;
			
			while( st.hasMoreTokens() )
			{
				try
				{
					addr = Integer.valueOf( st.nextToken() );
				}
				catch( NumberFormatException ex )
				{
						//  New - DNS stuff - If we get the first token
						//  is not a number, then try looking it up as a
						//  dns entry
					if ( !first )
					{
						ic.sendFeedback( "Invalid Characters in Site Address" );
						return;
					}
					
					o = sites.getElement( siteToBan );
					
					if ( o == null )
					{
						ic.sendFeedback( siteToBan + " is not a registered site" );
						return;
					}
					
					break;
				}

				first = false;

				if ( addr.intValue() < 0 || addr.intValue() > 255 )
				{
					ic.sendFeedback( "Site address Octets may only contain values between 0 and 255" );
					return;
				}

				o = sites.getElement( addr.toString() );

				if( o instanceof Network )
					sites = (Network) o;
				else if( o instanceof Site )
					break;
				else if( o == null )
				{
					ic.sendFeedback( "What!!! Pre-emptive sitebans - you gotta be Joking!!!" );
					return;
				}
				else
				{
					ic.sendFeedback( "Invalid Object found in Sites - Class " + o.getClass().getName() );
					return;
				}
			}
			
			if( !(o instanceof Site) )
			{
				ic.sendFeedback( "Site Address does represent a Site. Please check the address of the site provided." );
				return;
			}
			
			Site site = (Site) o;
			
			if( args.hasMoreTokens() )
			{
				Atom old = p.getContext();
				p.setContext( site );
				p.command( args.nextToken( "" ), ic, false );
				p.setContext( old );
				return;
			}
			
			p.setContext( site );
			ic.sendFeedback( "Now referencing '" + p.getContext().getId() + "'" );
		}
		else
			usage( ic );
	}
}