| Path: | server/shellCommands/environments.cmd (CVS) |
| Last Update: | Sat Aug 18 22:54:10 -0700 2007 |
# # MUES::CommandShell environment manipulation commands. # Time-stamp: <26-Oct-2002 23:45:29 deveiant> # $Id: environments.cmd,v 1.5 2002/10/28 00:13:17 deveiant Exp $ # # == Authors: # * Michael Granger <ged@FaerieMUD.org> #
### Load environment
admin
loadenv <class> [as] <name>
Create and/or load a environment object and make it available.
Creates a new environment of the specified class and associates it with the specified name. If there is already an environment associated with the given name, an error occurs.
results = []
if argString =~ %r{(\w+)\s+(?:as\s+)?(\w+)}
klass = $1
name = $2
results <<
MUES::OutputEvent::new( "Attempting to load the '#{klass}' environment as '#{name}'\n" ) <<
MUES::LoadEnvironmentEvent::new( name, klass, context.user )
else
results << MUES::OutputEvent::new( self.usage )
end
return results
### Unload environment
Shut down and unload a loaded environment object.
This command causes the server to unload a running environment after shutting it down and disconnecting all participants.
unloadenv <environment name>
admin
unless argString =~ %r{(\w+)}
return MUES::OutputEvent::new( self.usage )
end
return [UnloadEnvironmentEvent.new( $1, context.user )]
### List environments
List known environment classes which may be loaded.
This command outputs a list of all available environment classes which may be instantiated and run in the server.
admin
envlist
output = "\nAvailable MUES Environment classes:\n\t"
list = MUES::Environment.listEnvClasses
if list.empty?
output << "(None)"
else
output << list.join("\n\t")
end
output << "\n"
return [MUES::OutputEvent::new( output )]
### ‘Connect’ command
play
Connect to the specified environment in the specified role.
connect [to] <environment> [as] <role>
results = []
if argString =~ %r{(?:\s*to\s*)?(\w+)\s+(?:as\s*)?(\w+)}
envName, roleName = $1, $2
### Look for the requested role in the requested
### environment, returning the new filter object if we find
### it. Catch any problems as exceptions, and turn them into
### error messages for output.
env = MUES::ServerFunctions::getEnvironmentByName( envName ) or
raise CommandError, "No such environment '#{envName}'."
role = env.getAvailableRoles( context.user ).find {|role|
role.name == roleName
}
raise CommandError, "Role '#{roleName}' is not currently available to you." unless
role.is_a?( MUES::Role )
results << OutputEvent.new( "Connecting..." )
results << env.getParticipantProxy( context.user, role )
results << OutputEvent.new( "connected.\n\n" )
else
results << OutputEvent.new( usage() )
end
return results.flatten
### ‘Disconnect’ command
Disconnect from the specified role in the specified environment.
disconnect [<role> [in]] <environment>
results = []
roleName = nil
envName = nil
### Parse the arguments, returning a usage message if we can't
### parse
if argString =~ %r{(\w+)\s+(?:in\s*)?(\w+)}
roleName, envName = $1, $2
elsif argString =~ %r{(\w+)}
envName = $1
else
return [ MUES::OutputEvent.new( usage() ) ]
end
### Look for a proxy from the specified environment
targetEnv = MUES::ServerFunctions::getEnvironmentByName( envName ) or
raise CommandError, "No such environment '#{envName}'."
targetProxy = context.stream.findFiltersOfType( MUES::ParticipantProxy ).find {|f|
f.env == targetEnv && ( roleName.nil? || f.role.name == roleName )
} or raise CommandError, "Not connected to #{envName} #{roleName ? 'as ' + roleName : ''}"
results << OutputEvent.new( "Disconnecting from #{envName}..." )
targetEnv.removeParticipantProxy( targetProxy )
results << context.stream.stopFilters( targetProxy )
results << OutputEvent.new( " disconnected.\n\n" )
return results.flatten
### ‘Roles’ command
List available roles in the specified environments.
roles [<environment names>]
results = []
envNames = []
list = nil
### If they passed at least one environment name, parse them out
### of the line.
if argString =~ %r{\w}
envNames = argString.scan(/\w+/)
else
envNames = MUES::ServerFunctions::getEnvironmentNames
end
list = "\n"
roleCount = 0
envNames.each {|envName|
### Look for the roles in the requested environment. Catch any
### problems as exceptions, and turn them into error messages
### for output.
env = MUES::ServerFunctions::getEnvironmentByName( envName ) or
raise CommandError, "No such environment '#{envName}'."
list << "%s (%s)\n" % [ envName, env.class.name ]
env.getAvailableRoles( context.user ).each {|role|
list << " #{role.to_s}\n"
roleCount += 1
}
list << "\n"
}
list << "(#{roleCount}) role/s currently available to you.\n\n"
results << MUES::OutputEvent::new( list )
return results.flatten