public class Hub
extends java.lang.Object
main()
method is provided for
use from the command line.
Some of the static methods allow you to indicate which hub profiles
should be used, others use a default. The default list can be set
programmatically by using the setDefaultProfileClasses(java.lang.Class[], boolean)
method
or externally by using the
"jsamp.hub.profiles" and "jsamp.hub.profiles.extra"
system properties.
So, for instance, running an application with
-Djsamp.hub.profiles=web,std
will cause it to run hubs
using both the Standard and Web profiles if it does not explicitly choose
profiles.
Modifier and Type | Field and Description |
---|---|
private static java.lang.Class[] |
defaultDefaultExtraProfileClasses_ |
private static java.lang.Class[] |
defaultDefaultProfileClasses_ |
private static java.lang.Class[] |
defaultExtraProfileClasses_ |
private static java.lang.Class[] |
defaultProfileClasses_ |
static java.lang.String |
EXTRAHUBPROFILES_PROP
System property name for supplying default profiles ("jsamp.hub.profiles.extra")
additional to those in
HUBPROFILES_PROP which will be
supported by the hub but switched off at hub startup time. |
private static java.util.Map |
hubList_ |
static java.lang.String |
HUBPROFILES_PROP
System property name for supplying default profiles ("jsamp.hub.profiles")
available at hub startup.
|
private static java.util.logging.Logger |
logger_ |
private java.util.List |
profileList_ |
private HubService |
service_ |
Constructor and Description |
---|
Hub(HubService service)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
static void |
checkExternalHubAvailability()
Attempts to determine whether an external hub can be started using
runExternalHub . |
private static java.lang.Class[] |
createDefaultProfileClasses(boolean extra)
Invoked at class load time to come up with the list of hub
profiles to use when no profiles are specified explicitly.
|
static HubProfile[] |
createDefaultProfiles(boolean extra)
Returns an array of default Hub Profiles.
|
private static void |
discardBytes(java.io.InputStream in)
Ensures that any bytes from a given input stream are discarded.
|
private static void |
execBackground(java.lang.String[] cmdarray)
Executes a command in a separate process, and discards any stdout
or stderr output generated by it.
|
static java.lang.Class[] |
getDefaultProfileClasses(boolean extra)
Returns a copy of the default set of HubProfile classes used
when a hub is run and the list of profiles is not set explicitly.
|
HubService |
getHubService()
Returns the hub service associated with this hub.
|
static HubProfileFactory[] |
getKnownHubProfileFactories()
Returns a standard list of known HubProfileFactories.
|
private static HubProfile[] |
getProfiles(java.lang.String profTxt,
java.util.List argList,
boolean isExtra,
java.lang.String usage)
Parses profile list command-line argument and associated
command-line arguments to construct a list of required profiles.
|
static Hub[] |
getRunningHubs()
Returns an array of all the instances of this class which are
currently running.
|
HubProfile[] |
getRunningProfiles()
Returns the hub profiles currently running on behalf of this hub.
|
javax.swing.JFrame |
getWindow()
Returns a window for user monitoring and control of this hub,
if available.
|
static void |
main(java.lang.String[] args)
Main method, which allows configuration of which profiles will run
and configuration of those individual profiles.
|
private static HubProfileFactory |
parseProfileClass(java.lang.String txt)
Parses a string representing a hub profile.
|
static HubProfileFactory[] |
parseProfileList(java.lang.String listTxt)
Parses a string representing a list of hub profiles.
|
static void |
runExternalHub(HubServiceMode hubMode)
Attempts to run a hub in a new JVM with a default set of profiles.
|
static void |
runExternalHub(HubServiceMode hubMode,
java.lang.Class[] profileClasses,
java.lang.Class[] extraProfileClasses)
Attempts to start a hub in a new JVM with a given set
of profiles.
|
static Hub |
runHub(HubServiceMode hubMode)
Starts a SAMP hub with a default set of profiles.
|
static Hub |
runHub(HubServiceMode hubMode,
HubProfile[] profiles,
HubProfile[] extraProfiles)
Starts a SAMP hub with given sets of profiles.
|
static int |
runMain(java.lang.String[] args)
Invoked by main.
|
static void |
setDefaultProfileClasses(java.lang.Class[] clazzes,
boolean extra)
Sets the default set of HubProfile classes.
|
void |
shutdown()
Stops this hub and its profiles running.
|
void |
startProfile(HubProfile profile)
Starts a profile running on behalf of this hub.
|
void |
stopProfile(HubProfile profile)
Stops a profile running on behalf of this hub, and disconnects
all clients registered with it.
|
private final HubService service_
private final java.util.List profileList_
private static java.lang.Class[] defaultDefaultProfileClasses_
private static java.lang.Class[] defaultDefaultExtraProfileClasses_
private static java.lang.Class[] defaultProfileClasses_
private static java.lang.Class[] defaultExtraProfileClasses_
private static final java.util.Map hubList_
private static final java.util.logging.Logger logger_
public static final java.lang.String HUBPROFILES_PROP
parseProfileList(java.lang.String)
.public static final java.lang.String EXTRAHUBPROFILES_PROP
HUBPROFILES_PROP
which will be
supported by the hub but switched off at hub startup time.
The value of this property, if any, will be fed to
parseProfileList(java.lang.String)
.public Hub(HubService service)
service
- hub servicepublic void shutdown()
public void startProfile(HubProfile profile) throws java.io.IOException
profile
- to startjava.io.IOException
public void stopProfile(HubProfile profile)
profile
- profile to stoppublic HubService getHubService()
public HubProfile[] getRunningProfiles()
public javax.swing.JFrame getWindow()
public static HubProfileFactory[] getKnownHubProfileFactories()
parseProfileList(java.lang.String)
to supply the well-known named profiles.public static java.lang.Class[] getDefaultProfileClasses(boolean extra)
HubProfile
with a no-arg constructor.extra
- false for starting classes, true for additional onespublic static void setDefaultProfileClasses(java.lang.Class[] clazzes, boolean extra)
clazzes
- array to be returned by getDefaultProfileClassesextra
- false for starting classes, true for additional onesprivate static java.lang.Class[] createDefaultProfileClasses(boolean extra)
HUBPROFILES_PROP
system property is defined its value
is used instead.extra
- false for starting classes, true for additional onespublic static HubProfileFactory[] parseProfileList(java.lang.String listTxt)
name
of a HubProfileFactory
or the classname of a HubProfile
implementation
with a suitable no-arg constructor.listTxt
- comma-separated listjava.lang.IllegalArgumentException
- if unknownprivate static HubProfileFactory parseProfileClass(java.lang.String txt)
name
of a HubProfileFactory
or the classname of a HubProfile
implementation
with a suitable no-arg constructor.txt
- stringjava.lang.IllegalArgumentException
- if unknownpublic static HubProfile[] createDefaultProfiles(boolean extra)
getDefaultProfileClasses(boolean)
.extra
- false for starting profiles, true for additional onespublic static Hub runHub(HubServiceMode hubMode, HubProfile[] profiles, HubProfile[] extraProfiles) throws java.io.IOException
The profiles
argument gives the profiles which will
be started initially, and the extraProfiles
argument
lists more that can be started under user control later.
If either or both list is given as null, suitable defaults will be used.
If the hub mode corresponds to one of the GUI options, one of two things will happen. An attempt will be made to install an icon in the "system tray"; if this is successful, the attached popup menu will provide options for displaying the hub window and for shutting it down. If no system tray is available, the hub window will be posted directly, and the hub will shut down when this window is closed. System tray functionality is only available when running under Java 1.6 or later, and when using a suitable display manager.
hubMode
- hub modeprofiles
- SAMP profiles to support on hub startup;
if null a default set will be usedextraProfiles
- SAMP profiles to offer for later startup under
user control; if null a default set will be usedjava.io.IOException
public static Hub runHub(HubServiceMode hubMode) throws java.io.IOException
runHub(hubMode,null,null)
.hubMode
- hub modejava.io.IOException
runHub(HubServiceMode,HubProfile[],HubProfile[])
public static void runExternalHub(HubServiceMode hubMode, java.lang.Class[] profileClasses, java.lang.Class[] extraProfileClasses) throws java.io.IOException
The classes specified by the profileClasses
and
extraProfileClasses
arguments must implement
HubProfile
and must have a no-arg constructor.
If null is given in either case suitable defaults, taken from the
current JVM, are used.
hubMode
- hub modeprofileClasses
- hub profile classes to start on hub startupextraProfileClasses
- hub profile classes which may be started
later under user controljava.io.IOException
checkExternalHubAvailability()
public static void runExternalHub(HubServiceMode hubMode) throws java.io.IOException
runExternalHub(hubMode,null,null)
.hubMode
- hub modejava.io.IOException
runExternalHub(HubServiceMode,java.lang.Class[],java.lang.Class[])
public static Hub[] getRunningHubs()
public static void checkExternalHubAvailability() throws java.io.IOException
runExternalHub
.
If it can be determined that such an
attempt would fail, this method will throw an exception with
an informative message. This method succeeding is not a guarantee
that an external hub can be started successfullly.
The behaviour of this method is not expected to change over the
lifetime of a given JVM.java.io.IOException
public static void main(java.lang.String[] args)
-h
flag for usage.public static int runMain(java.lang.String[] args) throws java.io.IOException
args
- command-line argument arrayjava.io.IOException
private static HubProfile[] getProfiles(java.lang.String profTxt, java.util.List argList, boolean isExtra, java.lang.String usage) throws java.io.IOException
profTxt
- string value of profiles parameter (may be null)argList
- complete list of other so far unused command line
argsisExtra
- true for extraProfiles, false for main onesusage
- profile flag usage string, used for error messagesjava.io.IOException
private static void execBackground(java.lang.String[] cmdarray) throws java.io.IOException
Runtime.exec
can block the process
until its output is consumed.cmdarray
- array containing the command to call and its argsjava.io.IOException
private static void discardBytes(java.io.InputStream in)
in
- input stream