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 ##########   #####"
**
**  $Id: Time.java,v 1.4 1997/07/29 12:25:47 subtle Exp subtle $
**
**  Class History
**  
**  Date        Name         Description
**  ---------|------------|-----------------------------------------------
**  22Jun97     subtle       made actions static
**
*/

package key.commands;

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

public class Time extends Command
{
	public Time()
	{
		setKey( "time" );
		usage = "";
	}

	public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
	{
		boolean timeOnly = false;
		
		if( args.hasMoreTokens() )
		{
			String nt = args.nextToken();
			
			if( nt.equals( "-" ) )
				timeOnly = true;
		}
		
		Key key = Key.instance();
		Runtime rt = Runtime.getRuntime();
		
		StringBuffer sb = new StringBuffer();
		
		java.util.Date date = new java.util.Date();
		
		sb.append( date.toString() );
		
		Duration timezone;
		try
		{
			timezone = (Duration) p.getProperty( "timezone" );
		}
		catch( NoSuchPropertyException n )
		{
			ic.sendFeedback( "Your player does not contain a timezone attribute\n. Contact a director as soon as possible" );
			return;
		}
		
		if ( timezone.getTime() != 0 )
		{
			DateTime d = new DateTime( date.getTime(), timezone );
			sb.append( "\n<Your local time: " );
			sb.append( d.toString() );
			sb.append( ">" );
		}

		if( timeOnly )
		{
			ic.sendFeedback( sb.toString() );
			return;
		}
		else
			sb.append( '\n' );
		
		sb.append( '\n' );
		sb.append( key.getName() );
		sb.append( " has been running for " );
		sb.append( key.bootStats.getTimeSinceConnection() );
		
		int po = key.numberPlayers();
		
		sb.append( "\nThere " );
		sb.append( Grammar.isAre(po) );
		sb.append( ' ' );
		sb.append( po );
		sb.append( ' ' );
		sb.append( Grammar.personPeople(po) );
		sb.append( " online" );
		
		Enumeration e = key.players();
		Player topSpod = null;
		while( e.hasMoreElements() )
			topSpod = (Player) e.nextElement();
		
		if( topSpod != null )
		{
			Duration loginTime = topSpod.loginStats.getTimeSinceConnection();
			sb.append( '\n' );
			sb.append( topSpod.getName() );
			sb.append( " is top spod, with " );
			sb.append( loginTime.toTruncString() );
			sb.append( " spod time" );
		}
		
		ic.send( new TextParagraph( TextParagraph.CENTERED, sb.toString() ) );
	}
}