|
|||||||||
| Version 1.5 | APIs subject to change! | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectmultiverse.server.engine.EnginePlugin
multiverse.server.plugins.ProxyPlugin
public class ProxyPlugin
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.
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
|
| 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 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 java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Methods inherited from interface multiverse.msgsys.MessageCallback |
|---|
handleMessage |
| Field Detail |
|---|
protected java.util.concurrent.locks.Lock commandMapLock
public boolean defaultAllowClientToClientMessage
allowClientToClientMessage() when there is no method over-ride.
protected java.util.HashMap<java.lang.String,MessageType> extensionMessageRegistry
protected PerceptionFilter perceptionFilter
protected long perceptionSubId
protected PerceptionFilter responderFilter
protected long responderSubId
protected multiverse.server.network.rdp.RDPServerSocket serverSocket
protected static final Logger log
protected PlayerManager playerManager
protected TimeHistogram proxyQueueHistogram
protected TimeHistogram proxyCallbackHistogram
protected java.util.List<MessageType> extraPlayerMessageTypes
public static MessageType MSG_TYPE_VOICE_PARMS
protected static java.lang.String voiceServerHost
protected static java.lang.Integer voiceServerPort
public java.lang.String serverCapabilitiesSentToClient
public static int MaxConcurrentUsers
public static int maxMessagesBeforeConnectionReset
public static int maxByteCountBeforeConnectionReset
public java.lang.String capacityError
protected java.util.Map<java.lang.String,java.util.List<ProxyExtensionHook>> extensionHooks
| Constructor Detail |
|---|
public ProxyPlugin()
onActivate()| Method Detail |
|---|
public java.util.List<MessageType> getExtraPlayerMessageTypes()
public void setExtraPlayerMessageTypes(java.util.List<MessageType> extraPlayerMessageTypes)
public void addExtraPlayerMessageType(MessageType messageType)
public void addExtraPlayerExtensionMessageType(MessageType messageType)
public void addProxyExtensionHook(java.lang.String subType,
ProxyExtensionHook hook)
subType - Extension message sub-type.hook - Extension message handler.public java.util.Map<java.lang.String,java.util.List<ProxyExtensionHook>> getProxyExtensionHooks(java.lang.String subType)
public void onActivate()
onActivate in class EnginePluginregisterHooks(),
ProxyPlugin.EventCallback.doWork(java.lang.Object, java.lang.Object)
public void registerCommand(java.lang.String command,
ProxyPlugin.CommandParser parser)
command - The command to associate with the CommandParse,
eg: "/attack"parser - Command handler.protected void initializeVoiceServerInformation()
public void acceptConnection(multiverse.server.network.ClientConnection con)
acceptConnection in interface multiverse.server.network.ClientConnection.AcceptCallbackcon - The new client connection.
public void processPacket(multiverse.server.network.ClientConnection con,
multiverse.server.network.MVByteBuffer buf)
processPacket in interface multiverse.server.network.ClientConnection.MessageCallbackcon - The ClientConnection object for the player's client.buf - The byte buffer containing message from the client.public java.util.Set<java.lang.Long> getPlayerOids()
public java.util.List<java.lang.String> getPlayerNames()
public java.util.List<Player> getPlayers()
public Player getPlayer(long oid)
public void addPlayerMessage(Message message,
Player player)
public void addFilteredProperty(java.lang.String filteredProperty)
filteredProperty - The string property name.
protected boolean processLogin(multiverse.server.network.ClientConnection con,
AuthorizedLoginEvent loginEvent)
con - The connection to the client.loginEvent - The client message that asks to log the
client in.protected boolean loadPlayerObject(long playerOid)
protected boolean processLoginHelper(multiverse.server.network.ClientConnection con,
Player player)
con - The ClientConnection to the clientplayer - The Player instance of the player that just logged in
public void processRequestQuestInfo(multiverse.server.network.ClientConnection con,
RequestQuestInfo event)
public void processQuestResponse(multiverse.server.network.ClientConnection con,
QuestResponse event)
public void processReqConcludeQuest(multiverse.server.network.ClientConnection con,
ConcludeQuest event)
public void connectionReset(multiverse.server.network.ClientConnection con)
connectionReset in interface multiverse.server.network.ClientConnection.MessageCallbackcon - The connection to the client.protected void processConnectionResetInternal(multiverse.server.plugins.ProxyPlugin.ConnectionResetMessage message)
protected void processDirLoc(multiverse.server.network.ClientConnection con,
DirLocEvent event)
protected void processDirLocOrient(multiverse.server.network.ClientConnection con,
DirLocOrientEvent event)
protected void processCom(multiverse.server.network.ClientConnection con,
ComEvent event)
protected void processOrient(multiverse.server.network.ClientConnection con,
OrientEvent event)
protected void processCommand(multiverse.server.network.ClientConnection con,
CommandEvent event)
protected void processAutoAttack(multiverse.server.network.ClientConnection con,
AutoAttackEvent event)
protected void processActivateItem(multiverse.server.network.ClientConnection con,
ActivateItemEvent event)
protected void processExtensionMessageEvent(multiverse.server.network.ClientConnection con,
ExtensionMessageEvent event)
public void registerExtensionSubtype(java.lang.String subtype,
MessageType type)
subtype will be
assigned server message type type.
public MessageType unregisterExtensionSubtype(java.lang.String subtype)
public MessageType getExtensionMessageType(java.lang.String subtype)
public boolean allowClientToClientMessage(Player sender,
java.lang.Long targetOid,
WorldManagerClient.TargetedExtensionMessage message)
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.
sender - Sending player.targetOid - Target player OID.message - The extension message.
protected boolean specialCaseNewProcessing(PerceptionMessage.ObjectNote objectNote,
Player player)
objectNote - Describes the object to be created.player - The player object to which the message should be
sent.
protected boolean specialCaseFreeProcessing(PerceptionMessage.ObjectNote objectNote,
Player player)
objectNote - Describes the object to be created.player - The player object to which the message should be
sent.
protected void handleFreeRoad(multiverse.server.network.ClientConnection con,
java.lang.Long objOid)
protected void pushInstanceRestorePoint(Player player,
BasicWorldNode loc)
protected void sendPlayerInfo(Player player)
protected void sendOceanData(OceanData oceanData,
Player player)
protected Player verifyPlayer(java.lang.String context,
Event event,
multiverse.server.network.ClientConnection con)
public void addAdmin(java.lang.Long oid)
public java.util.Set<java.lang.Long> getAdmins()
public boolean isAdmin(java.lang.Long oid)
protected java.lang.Object createMBeanInstance()
createMBeanInstance in class EnginePlugin
|
Copyright © 2008 The Multiverse Network, Inc. |
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||