Version 1.5APIs subject to change!

multiverse.server.plugins
Class ProxyPlugin

java.lang.Object
  extended by multiverse.server.engine.EnginePlugin
      extended by multiverse.server.plugins.ProxyPlugin
All Implemented Interfaces:
MessageCallback, StatusMapCallback, multiverse.server.network.ClientConnection.AcceptCallback, multiverse.server.network.ClientConnection.MessageCallback
Direct Known Subclasses:
MarsProxyPlugin

public class ProxyPlugin
extends EnginePlugin
implements MessageCallback, multiverse.server.network.ClientConnection.AcceptCallback, multiverse.server.network.ClientConnection.MessageCallback

The ProxyPlugin is the sole plugin charged to communicate with clients. The onActivate method opens both TCP and RDP listeners, both on the same port, allowing clients to connect over TCP are RDP.

Messages from other plugins are delvered to the PluginMessageCallback's handleMessage() method by the MessageAgent, and are queued in a SquareQueue instance based on the player oid for which they are intended.

Similarly, events stream in from clients via calls to the processPacket() method, where the events are parsed and and queued in another SquareQueue reserved for events. Ultimately the SquareQueue calls a callback to process the event.

See Also:
ProxyPlugin.PluginMessageCallback.handleMessage(multiverse.msgsys.Message, int), SquareQueue, ProxyPlugin.EventCallback.doWork(java.lang.Object, java.lang.Object), processPacket(multiverse.server.network.ClientConnection, multiverse.server.network.MVByteBuffer)

Nested Class Summary
static interface ProxyPlugin.CommandParser
          Interface for handling client command events.
 class ProxyPlugin.EventCallback
          The callback called by the SquareQueue holding messages from clients.
 class ProxyPlugin.PlayerMessageCallback
          The Handler for player-specific messages coming in from other plugins.
 class ProxyPlugin.PluginMessageCallback
          Handler for non-player-specific messages
protected  class ProxyPlugin.ProxyJMX
           
static interface ProxyPlugin.ProxyJMXMBean
           
 
Nested classes/interfaces inherited from class multiverse.server.engine.EnginePlugin
EnginePlugin.DeleteHook, EnginePlugin.DeleteSubObjHook, EnginePlugin.GenerateSubObjectHook, EnginePlugin.GetPropertyMessage, EnginePlugin.LoadHook, EnginePlugin.LoadSubObjHook, EnginePlugin.PluginActivateHook, EnginePlugin.PluginStateMessage, EnginePlugin.SaveHook, EnginePlugin.SaveSubObjHook, EnginePlugin.SetPropertyMessage, EnginePlugin.SubObjData, EnginePlugin.TransferFilter, EnginePlugin.TransferObjectMessage, EnginePlugin.UnloadHook, EnginePlugin.UnloadSubObjHook
 
Field Summary
 java.lang.String capacityError
          The error message issued if too many clients try to log in.
protected  java.util.concurrent.locks.Lock commandMapLock
           
 boolean defaultAllowClientToClientMessage
          Default value of allowClientToClientMessage() when there is no method over-ride.
protected  java.util.Map<java.lang.String,java.util.List<ProxyExtensionHook>> extensionHooks
           
protected  java.util.HashMap<java.lang.String,MessageType> extensionMessageRegistry
           
protected  java.util.List<MessageType> extraPlayerMessageTypes
           
protected static Logger log
           
static int maxByteCountBeforeConnectionReset
          If the client connection has more than this number of message bytes queued, reset the client connection
static int MaxConcurrentUsers
          The number of concurrent users allowed in the game.
static int maxMessagesBeforeConnectionReset
          If the client connection has more than this number of messages queued, reset the client connection
static MessageType MSG_TYPE_VOICE_PARMS
           
protected  PerceptionFilter perceptionFilter
           
protected  long perceptionSubId
           
protected  PlayerManager playerManager
           
protected  TimeHistogram proxyCallbackHistogram
           
protected  TimeHistogram proxyQueueHistogram
           
protected  PerceptionFilter responderFilter
           
protected  long responderSubId
           
 java.lang.String serverCapabilitiesSentToClient
          This is a comma-separated list of capabilities that will be sent to the client in the LoginResponseEvent, intended to tell the client what the server can do.
protected  multiverse.server.network.rdp.RDPServerSocket serverSocket
           
protected static java.lang.String voiceServerHost
          For now, just one voice plugin.
protected static java.lang.Integer voiceServerPort
           
 
Fields inherited from class multiverse.server.engine.EnginePlugin
deleteSubObjectSubscription, dumpAllThreadSubscription, dumpAllThreadSubscriptionLock, loadSubObjectSubscription, lock, MSG_TYPE_DUMP_ALL_THREAD_STACKS, MSG_TYPE_GET_PROPERTY, MSG_TYPE_PLUGIN_STATE, MSG_TYPE_SET_PROPERTY, MSG_TYPE_SET_PROPERTY_NONBLOCK, MSG_TYPE_TRANSFER_OBJECT, pluginStateSubscription, propertySubscription, saveSubObjectSubscription, selectionFilter, selectionSubscription, setSubObjectPersistenceSubscription, subObjectSubscription, unloadSubObjectSubscription
 
Fields inherited from interface multiverse.msgsys.MessageCallback
NO_FLAGS, RESPONSE_EXPECTED
 
Constructor Summary
ProxyPlugin()
          The ProxyPlugin constructor tells the underlying engine that it is, in fact, the proxy plugin, and creates a series of message counters for debugging purposes.
 
Method Summary
 void acceptConnection(multiverse.server.network.ClientConnection con)
          Registers the proxy plugin instance as the message handler for the client connection.
 void addAdmin(java.lang.Long oid)
          Adds an oid to the list of players which are allowed to log in even when the server reaches MaxConcurrentUsers
 void addExtraPlayerExtensionMessageType(MessageType messageType)
          Additional extension message type to add to proxy's player subscription filter.
 void addExtraPlayerMessageType(MessageType messageType)
          Additional message type to add to proxy's player subscription filter.
 void addFilteredProperty(java.lang.String filteredProperty)
          An entrypoint that allows Python code to add a filtered property, which is a property that is _not_ sent to any client.
 void addPlayerMessage(Message message, Player player)
          Add message directly to player's message queue.
 void addProxyExtensionHook(java.lang.String subType, ProxyExtensionHook hook)
          Call hook when client sends extension message sub-type.
 boolean allowClientToClientMessage(Player sender, java.lang.Long targetOid, WorldManagerClient.TargetedExtensionMessage message)
          Return true if the message is allowed from sending to target player.
 void connectionReset(multiverse.server.network.ClientConnection con)
          Method to log a client out, by asking the PlayerManager to set its status to logged out, and enqueuing a ConnectionResetMessage in the player's event SquareQueue.
protected  java.lang.Object createMBeanInstance()
          Return JMX MBean instance object.
 java.util.Set<java.lang.Long> getAdmins()
          Returns a set of admin oids
 MessageType getExtensionMessageType(java.lang.String subtype)
          Get server message type for an extension message sub-type.
 java.util.List<MessageType> getExtraPlayerMessageTypes()
           
 Player getPlayer(long oid)
          Get player.
 java.util.List<java.lang.String> getPlayerNames()
          Used by the /who command to get the set of player names.
 java.util.Set<java.lang.Long> getPlayerOids()
          Used by the /dirlight command to get the set of player oids.
 java.util.List<Player> getPlayers()
          Get the players using this proxy.
 java.util.Map<java.lang.String,java.util.List<ProxyExtensionHook>> getProxyExtensionHooks(java.lang.String subType)
           
protected  void handleFreeRoad(multiverse.server.network.ClientConnection con, java.lang.Long objOid)
          Tell the client to free the road represented by the objOid.
protected  void initializeVoiceServerInformation()
           
 boolean isAdmin(java.lang.Long oid)
          Returns true if the oid is in the set of admins; false otherwise.
protected  boolean loadPlayerObject(long playerOid)
           
 void onActivate()
          onActivate() is the real startup method.
protected  void processActivateItem(multiverse.server.network.ClientConnection con, ActivateItemEvent event)
           
protected  void processAutoAttack(multiverse.server.network.ClientConnection con, AutoAttackEvent event)
           
protected  void processCom(multiverse.server.network.ClientConnection con, ComEvent event)
          Process a ComEvent from the client, represent a chat event; calls the WorldManagerClient.sendaChatMsg to get the work done.
protected  void processCommand(multiverse.server.network.ClientConnection con, CommandEvent event)
          Process a CommandEvent, representing a /foo command typed by a client; looks up the command in the commandMap, and runs the parser found there against the event, creating a Message instance, and broadcasts the Message.
protected  void processConnectionResetInternal(multiverse.server.plugins.ProxyPlugin.ConnectionResetMessage message)
          The method called by the event SquareQueue to reset the connection for a player.
protected  void processDirLoc(multiverse.server.network.ClientConnection con, DirLocEvent event)
          Process a DirLocEvent from the client; calls the WorldManagerClient.updateWorldNode to get the work done.
protected  void processDirLocOrient(multiverse.server.network.ClientConnection con, DirLocOrientEvent event)
          Process a DirLocOrientEvent from the client; calls the WorldManagerClient.updateWorldNode to get the work done.
protected  void processExtensionMessageEvent(multiverse.server.network.ClientConnection con, ExtensionMessageEvent event)
           
protected  boolean processLogin(multiverse.server.network.ClientConnection con, AuthorizedLoginEvent loginEvent)
          Process login message from the client.
protected  boolean processLoginHelper(multiverse.server.network.ClientConnection con, Player player)
          This is a helper method that implements the part of login.
protected  void processOrient(multiverse.server.network.ClientConnection con, OrientEvent event)
          Process a OrientEvent from the client; calls the WorldManagerClient.sendOrientMsg to get the work done.
 void processPacket(multiverse.server.network.ClientConnection con, multiverse.server.network.MVByteBuffer buf)
          The proxy method called to process a message from a client.
 void processQuestResponse(multiverse.server.network.ClientConnection con, QuestResponse event)
          Player is accepting or declining a quest
 void processReqConcludeQuest(multiverse.server.network.ClientConnection con, ConcludeQuest event)
          Player is attempting to conclude a quest with a mob
 void processRequestQuestInfo(multiverse.server.network.ClientConnection con, RequestQuestInfo event)
          Player is asking for info about a quest
protected  void pushInstanceRestorePoint(Player player, BasicWorldNode loc)
           
 void registerCommand(java.lang.String command, ProxyPlugin.CommandParser parser)
          Associates a CommandParser with the appropriate "slash" command.
 void registerExtensionSubtype(java.lang.String subtype, MessageType type)
          Register mapping from extension sub-type to server message type.
protected  void sendOceanData(OceanData oceanData, Player player)
           
protected  void sendPlayerInfo(Player player)
           
 void setExtraPlayerMessageTypes(java.util.List<MessageType> extraPlayerMessageTypes)
          Set message types to add to proxy's player subscription filter.
protected  boolean specialCaseFreeProcessing(PerceptionMessage.ObjectNote objectNote, Player player)
          Check to see if freeing of this object is one of the special cases of object freeing: freeing a road, or a terrain decal.
protected  boolean specialCaseNewProcessing(PerceptionMessage.ObjectNote objectNote, Player player)
          Check to see if making this new object is one of the special cases of object creation: making a light, or a terrain decal, or a point sound.
 MessageType unregisterExtensionSubtype(java.lang.String subtype)
          Unregister extension sub-type mapping.
protected  Player verifyPlayer(java.lang.String context, Event event, multiverse.server.network.ClientConnection con)
          If the ClientConnection associated with the playerOid passed in does not match the ClientConnection argument, throw an error.
 
Methods inherited from class multiverse.server.engine.EnginePlugin
activate, createSubscription, getHookManager, getMessageHandler, getName, getObjectLockManager, getObjectProperties, getObjectProperties, getObjectProperty, getPercentCPULoad, getPluginInfo, getPluginNamespaces, getPluginState, getPluginStatus, getPluginType, getPropertyImpl, getStatusMap, handleMessage, handleMessageImpl, logDepsOutstanding, processKeysAndValues, registerActivateHook, registerDeleteHook, registerLoadHook, registerPluginNamespace, registerPluginNamespaces, registerPluginNamespaces, registerPluginNamespaces, registerSaveHook, registerTransferHook, registerUnloadHook, sendSubObjectResponse, sendSubObjectResponse, sendSubObjectResponse, setMessageHandler, setName, setObjectProperties, setObjectProperties, setObjectPropertiesNoResponse, setObjectPropertiesNoResponse, setObjectProperty, setObjectPropertyNoResponse, setPercentCPULoad, setPluginInfo, setPluginType, setPropertyImpl, transferObject
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface multiverse.msgsys.MessageCallback
handleMessage
 

Field Detail

commandMapLock

protected java.util.concurrent.locks.Lock commandMapLock

defaultAllowClientToClientMessage

public boolean defaultAllowClientToClientMessage
Default value of allowClientToClientMessage() when there is no method over-ride.


extensionMessageRegistry

protected java.util.HashMap<java.lang.String,MessageType> extensionMessageRegistry

perceptionFilter

protected PerceptionFilter perceptionFilter

perceptionSubId

protected long perceptionSubId

responderFilter

protected PerceptionFilter responderFilter

responderSubId

protected long responderSubId

serverSocket

protected multiverse.server.network.rdp.RDPServerSocket serverSocket

log

protected static final Logger log

playerManager

protected PlayerManager playerManager

proxyQueueHistogram

protected TimeHistogram proxyQueueHistogram

proxyCallbackHistogram

protected TimeHistogram proxyCallbackHistogram

extraPlayerMessageTypes

protected java.util.List<MessageType> extraPlayerMessageTypes

MSG_TYPE_VOICE_PARMS

public static MessageType MSG_TYPE_VOICE_PARMS

voiceServerHost

protected static java.lang.String voiceServerHost
For now, just one voice plugin. In the future, the proxy will maintain load information for each voice plugin process, and use that load information to decide which process to direct the user to.


voiceServerPort

protected static java.lang.Integer voiceServerPort

serverCapabilitiesSentToClient

public java.lang.String serverCapabilitiesSentToClient
This is a comma-separated list of capabilities that will be sent to the client in the LoginResponseEvent, intended to tell the client what the server can do. This complements the client capabilities sent to the server in the version field of the initial LoginEvent.


MaxConcurrentUsers

public static int MaxConcurrentUsers
The number of concurrent users allowed in the game. login will fail if there are this many users online.


maxMessagesBeforeConnectionReset

public static int maxMessagesBeforeConnectionReset
If the client connection has more than this number of messages queued, reset the client connection


maxByteCountBeforeConnectionReset

public static int maxByteCountBeforeConnectionReset
If the client connection has more than this number of message bytes queued, reset the client connection


capacityError

public java.lang.String capacityError
The error message issued if too many clients try to log in.


extensionHooks

protected java.util.Map<java.lang.String,java.util.List<ProxyExtensionHook>> extensionHooks
Constructor Detail

ProxyPlugin

public ProxyPlugin()
The ProxyPlugin constructor tells the underlying engine that it is, in fact, the proxy plugin, and creates a series of message counters for debugging purposes. All the real startup action happens in the onActivate method.

See Also:
onActivate()
Method Detail

getExtraPlayerMessageTypes

public java.util.List<MessageType> getExtraPlayerMessageTypes()

setExtraPlayerMessageTypes

public void setExtraPlayerMessageTypes(java.util.List<MessageType> extraPlayerMessageTypes)
Set message types to add to proxy's player subscription filter. Must be called before the plugin is registered/activated. Useful to make the proxy subscribe to additional ExtensionMessage message types. You still need to add a Hook to handle the additional message types.


addExtraPlayerMessageType

public void addExtraPlayerMessageType(MessageType messageType)
Additional message type to add to proxy's player subscription filter. Must be called before the plugin is registered/activated. Useful to make the proxy subscribe to additional ExtensionMessage message types. You still need to add a Hook to handle the message type.


addExtraPlayerExtensionMessageType

public void addExtraPlayerExtensionMessageType(MessageType messageType)
Additional extension message type to add to proxy's player subscription filter. Must be called before the plugin is registered/activated. Message type will be handled with by the ProxyPlugin default ExtensionMessage handler.


addProxyExtensionHook

public void addProxyExtensionHook(java.lang.String subType,
                                  ProxyExtensionHook hook)
Call hook when client sends extension message sub-type. Multiple hooks can be registered for the same extension message sub-type. The order of invocation is undefined.

Parameters:
subType - Extension message sub-type.
hook - Extension message handler.

getProxyExtensionHooks

public java.util.Map<java.lang.String,java.util.List<ProxyExtensionHook>> getProxyExtensionHooks(java.lang.String subType)

onActivate

public void onActivate()
onActivate() is the real startup method. It:
  • Initializes the PacketAggregator, which groups together messages to the client if they are created in a short interval, defaulting to 25ms.
  • Initilizes display of message processing time histograms.
  • Enumerates the list of properties in PropertyMessages that don't need to be sent to the client, because the client doesn't pay attention to them. This is not yet customizable, but should be.
  • Calls registerHooks to enumerate the proxy's message processing hooks.
  • Establishes the PerceptionFilter for the many message types sent by other plugins, to which players and other objects will be added as the are created, and creates the master subscription using the PerceptionFilter. This is not yet customizable, but should be.
  • Creates and opens the RDP listener using the proxy listener port.
  • Creates and opens the TCP listener using the proxy listern port.
  • Overrides:
    onActivate in class EnginePlugin
    See Also:
    registerHooks(), ProxyPlugin.EventCallback.doWork(java.lang.Object, java.lang.Object)

    registerCommand

    public void registerCommand(java.lang.String command,
                                ProxyPlugin.CommandParser parser)
    Associates a CommandParser with the appropriate "slash" command.

    Parameters:
    command - The command to associate with the CommandParse, eg: "/attack"
    parser - Command handler.

    initializeVoiceServerInformation

    protected void initializeVoiceServerInformation()

    acceptConnection

    public void acceptConnection(multiverse.server.network.ClientConnection con)
    Registers the proxy plugin instance as the message handler for the client connection.

    Specified by:
    acceptConnection in interface multiverse.server.network.ClientConnection.AcceptCallback
    Parameters:
    con - The new client connection.

    processPacket

    public void processPacket(multiverse.server.network.ClientConnection con,
                              multiverse.server.network.MVByteBuffer buf)
    The proxy method called to process a message from a client.

    Specified by:
    processPacket in interface multiverse.server.network.ClientConnection.MessageCallback
    Parameters:
    con - The ClientConnection object for the player's client.
    buf - The byte buffer containing message from the client.

    getPlayerOids

    public java.util.Set<java.lang.Long> getPlayerOids()
    Used by the /dirlight command to get the set of player oids.

    Returns:
    The set of oids for logged-in players.

    getPlayerNames

    public java.util.List<java.lang.String> getPlayerNames()
    Used by the /who command to get the set of player names.

    Returns:
    The list of names for logged-in players.

    getPlayers

    public java.util.List<Player> getPlayers()
    Get the players using this proxy. The Player object is local to the proxy and only tracks the player's login status.


    getPlayer

    public Player getPlayer(long oid)
    Get player. The Player object is local to the proxy and only tracks the player's login status.

    Returns:
    Player on success, null on failure.

    addPlayerMessage

    public void addPlayerMessage(Message message,
                                 Player player)
    Add message directly to player's message queue.


    addFilteredProperty

    public void addFilteredProperty(java.lang.String filteredProperty)
    An entrypoint that allows Python code to add a filtered property, which is a property that is _not_ sent to any client.

    Parameters:
    filteredProperty - The string property name.

    processLogin

    protected boolean processLogin(multiverse.server.network.ClientConnection con,
                                   AuthorizedLoginEvent loginEvent)
    Process login message from the client. The heavy lifting is done in the processLoginHelper method, and then we ask the playerManager to make a Player object for the connection.

    Parameters:
    con - The connection to the client.
    loginEvent - The client message that asks to log the client in.

    loadPlayerObject

    protected boolean loadPlayerObject(long playerOid)

    processLoginHelper

    protected boolean processLoginHelper(multiverse.server.network.ClientConnection con,
                                         Player player)
    This is a helper method that implements the part of login. Mostly, it sends the client additional messages here, and set up the subscriptions that we will need.

    Parameters:
    con - The ClientConnection to the client
    player - The Player instance of the player that just logged in

    processRequestQuestInfo

    public void processRequestQuestInfo(multiverse.server.network.ClientConnection con,
                                        RequestQuestInfo event)
    Player is asking for info about a quest


    processQuestResponse

    public void processQuestResponse(multiverse.server.network.ClientConnection con,
                                     QuestResponse event)
    Player is accepting or declining a quest


    processReqConcludeQuest

    public void processReqConcludeQuest(multiverse.server.network.ClientConnection con,
                                        ConcludeQuest event)
    Player is attempting to conclude a quest with a mob


    connectionReset

    public void connectionReset(multiverse.server.network.ClientConnection con)
    Method to log a client out, by asking the PlayerManager to set its status to logged out, and enqueuing a ConnectionResetMessage in the player's event SquareQueue.

    Specified by:
    connectionReset in interface multiverse.server.network.ClientConnection.MessageCallback
    Parameters:
    con - The connection to the client.

    processConnectionResetInternal

    protected void processConnectionResetInternal(multiverse.server.plugins.ProxyPlugin.ConnectionResetMessage message)
    The method called by the event SquareQueue to reset the connection for a player. The player oid is in the event object.


    processDirLoc

    protected void processDirLoc(multiverse.server.network.ClientConnection con,
                                 DirLocEvent event)
    Process a DirLocEvent from the client; calls the WorldManagerClient.updateWorldNode to get the work done.


    processDirLocOrient

    protected void processDirLocOrient(multiverse.server.network.ClientConnection con,
                                       DirLocOrientEvent event)
    Process a DirLocOrientEvent from the client; calls the WorldManagerClient.updateWorldNode to get the work done.


    processCom

    protected void processCom(multiverse.server.network.ClientConnection con,
                              ComEvent event)
    Process a ComEvent from the client, represent a chat event; calls the WorldManagerClient.sendaChatMsg to get the work done.


    processOrient

    protected void processOrient(multiverse.server.network.ClientConnection con,
                                 OrientEvent event)
    Process a OrientEvent from the client; calls the WorldManagerClient.sendOrientMsg to get the work done.


    processCommand

    protected void processCommand(multiverse.server.network.ClientConnection con,
                                  CommandEvent event)
    Process a CommandEvent, representing a /foo command typed by a client; looks up the command in the commandMap, and runs the parser found there against the event, creating a Message instance, and broadcasts the Message.


    processAutoAttack

    protected void processAutoAttack(multiverse.server.network.ClientConnection con,
                                     AutoAttackEvent event)

    processActivateItem

    protected void processActivateItem(multiverse.server.network.ClientConnection con,
                                       ActivateItemEvent event)

    processExtensionMessageEvent

    protected void processExtensionMessageEvent(multiverse.server.network.ClientConnection con,
                                                ExtensionMessageEvent event)

    registerExtensionSubtype

    public void registerExtensionSubtype(java.lang.String subtype,
                                         MessageType type)
    Register mapping from extension sub-type to server message type. Client-originated extension message with subtype will be assigned server message type type.


    unregisterExtensionSubtype

    public MessageType unregisterExtensionSubtype(java.lang.String subtype)
    Unregister extension sub-type mapping.


    getExtensionMessageType

    public MessageType getExtensionMessageType(java.lang.String subtype)
    Get server message type for an extension message sub-type.


    allowClientToClientMessage

    public boolean allowClientToClientMessage(Player sender,
                                              java.lang.Long targetOid,
                                              WorldManagerClient.TargetedExtensionMessage message)
    Return true if the message is allowed from sending to target player. By default, returns the value of defaultAllowClientToClientMessage.

    Over-ride to implement security and filtering logic. The message can be modified by this method; the modified message is sent to the target client.

    Parameters:
    sender - Sending player.
    targetOid - Target player OID.
    message - The extension message.
    Returns:
    False if the message should not be sent to target player.

    specialCaseNewProcessing

    protected boolean specialCaseNewProcessing(PerceptionMessage.ObjectNote objectNote,
                                               Player player)
    Check to see if making this new object is one of the special cases of object creation: making a light, or a terrain decal, or a point sound. If so, do the processing here. If not, get the object info for the object, and send it to the client.

    Parameters:
    objectNote - Describes the object to be created.
    player - The player object to which the message should be sent.
    Returns:
    True if special-case handling took place, false otherwise.

    specialCaseFreeProcessing

    protected boolean specialCaseFreeProcessing(PerceptionMessage.ObjectNote objectNote,
                                                Player player)
    Check to see if freeing of this object is one of the special cases of object freeing: freeing a road, or a terrain decal. If so, do the processing here.

    Parameters:
    objectNote - Describes the object to be created.
    player - The player object to which the message should be sent.
    Returns:
    True if special-case handling took place, false otherwise.

    handleFreeRoad

    protected void handleFreeRoad(multiverse.server.network.ClientConnection con,
                                  java.lang.Long objOid)
    Tell the client to free the road represented by the objOid.


    pushInstanceRestorePoint

    protected void pushInstanceRestorePoint(Player player,
                                            BasicWorldNode loc)

    sendPlayerInfo

    protected void sendPlayerInfo(Player player)

    sendOceanData

    protected void sendOceanData(OceanData oceanData,
                                 Player player)

    verifyPlayer

    protected Player verifyPlayer(java.lang.String context,
                                  Event event,
                                  multiverse.server.network.ClientConnection con)
    If the ClientConnection associated with the playerOid passed in does not match the ClientConnection argument, throw an error.


    addAdmin

    public void addAdmin(java.lang.Long oid)
    Adds an oid to the list of players which are allowed to log in even when the server reaches MaxConcurrentUsers


    getAdmins

    public java.util.Set<java.lang.Long> getAdmins()
    Returns a set of admin oids


    isAdmin

    public boolean isAdmin(java.lang.Long oid)
    Returns true if the oid is in the set of admins; false otherwise.


    createMBeanInstance

    protected java.lang.Object createMBeanInstance()
    Return JMX MBean instance object. Over-ride to provide your own MBean implementation.

    Overrides:
    createMBeanInstance in class EnginePlugin


    Copyright © 2008 The Multiverse Network, Inc.