/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" ** ** $Id: Page.java,v 1.4 1997/07/24 13:57:43 subtle Exp subtle $ ** ** Class History ** ** Date Name Description ** ---------|------------|----------------------------------------------- ** 22Jun97 subtle made actions static ** */ package key.commands; import key.*; import key.primitive.*; import java.io.*; import java.util.StringTokenizer; public class Page extends Command { public static final AtomicElement[] ELEMENTS = { AtomicElement.construct( Page.class, String.class, "send", AtomicElement.PUBLIC_FIELD, "the message sent to the target" ), AtomicElement.construct( Page.class, String.class, "feedback", AtomicElement.PUBLIC_FIELD, "the feedback on success" ), AtomicElement.construct( Page.class, Boolean.TYPE, "enforceMessage", AtomicElement.PUBLIC_FIELD, "if true, a message must be supplied" ), AtomicElement.construct( Page.class, Duration.class, "pause", AtomicElement.PUBLIC_FIELD, "the cool-off delay between pages" ) }; public static final AtomicStructure STRUCTURE = new AtomicStructure( Command.STRUCTURE, ELEMENTS ); public static final char originatorCode = 'o'; public static final char targetCode = 't'; public static final char messageCode = 'm'; // used for cookies: static means 'wake' and 'page' use the same one private static Object cookie = new Object(); public String send = "A pageboy taps you on the shoulder and says '%o asked me to tell you: \"%m\"'"; public String feedback = "You page %t"; public boolean enforceMessage = true; public Duration pause = new Duration( 120000 ); public Page() { setKey( "page" ); usage = "<name> [<message>]"; } public AtomicStructure getDeclaredStructure() { return( STRUCTURE ); } public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException { if( args.hasMoreTokens() ) { Player targetPlayer; String playerName = args.nextToken(); // get the target player if they are online targetPlayer = (Player) getOnlinePlayer( p, ic, playerName ); if( targetPlayer == p ) { ic.sendFeedback( "The page boy looks at you a little strangely, mutters something to himself, and returns to other duties." ); return; } else if( targetPlayer == null ) return; if( args.hasMoreTokens() != enforceMessage ) { usage( ic ); return; } if( pause.getTime() > 0 ) { Object c = p.getCookie( cookie ); if( c != null ) { DateTime d = (DateTime)c; DateTime now = new DateTime(); if( d.after( now ) ) { Duration dur = now.difference( d ); ic.sendFeedback( "The pageboy is still recovering from your last request. Give him another " + dur.toString() + "." ); return; } } DateTime dt = DateTime.nowPlus( pause ); p.setCookie( cookie, dt ); } // construct message String m; String f; p.putCode( originatorCode, p.getName() ); p.putCode( targetCode, targetPlayer.getName() ); if( args.hasMoreTokens() ) p.putCode( messageCode, args.nextToken( "" ) ); m = Grammar.substitute( send, p.getCodes() ); f = Grammar.substitute( feedback, p.getCodes() ); // send the splash (new key.effect.Page( p, targetPlayer, f, m ) ).cause(); } else usage( ic ); } }