📄 messageprocessor.java
字号:
/*
* MessageProcessor.java
*
* Copyright (C) 2000 Jason M. Hanley
* Released under the GNU General Public License (GPL)
* See license.txt for additional information.
*
* Created on July 29, 2000, 12:25 AM
*/
package fate.server;
import fate.*;
import fate.messages.*;
import fate.network.*;
import fate.util.*;
import fate.world.*;
/**
* Handles the base message processing logic for the server.
* <br><br>
* Note that {@link LoginMessage} is actually handled by {@link ServerThread}.
*
* @author preylude@s3m.com
* @version 0.1.0
*/
public class MessageProcessor extends Thread {
static final int DELAY_TIME = 100;
ServerConnection connection;
MapPlayerInfo mapPlayerInfo;
/** Creates new MessageProcessor */
public MessageProcessor( ServerConnection connection,
MapPlayerInfo mapPlayerInfo ) {
this.connection = connection;
this.mapPlayerInfo = mapPlayerInfo;
}
/** Process incoming messages from the server */
public void run() {
try {
Debug.trace( "MessageProcessor initialized and entering loop" );
while (true) {
// Loop while there are incoming messages
while ( connection != null && connection.messagesAvailable() ) {
ServerMessage msgServer = (ServerMessage) connection.nextMessage();
int idPlayer = msgServer.idPlayer;
Object msgIn = msgServer.message;
Class c = msgIn.getClass();
Debug.trace( "MessageProcessor read msg: " + c.getName() +
"from playerID " + Integer.toString( idPlayer ) );
// Get player info for the client who sent the message
PlayerInfo playerInfo = mapPlayerInfo.get( idPlayer );
// Retrieve the player object from the universe
Player player = null;
if ( playerInfo != null )
player = (Player)FateServer.universe.mapPlayers.get( playerInfo.idPlayer );
// Don't bother processing the message if we don't have
// info on the player
if ( playerInfo != null && player != null ) {
// Handle ChatMessage
if ( c.getName().endsWith( "ChatMessage" ) ) {
// Simply relay the message to the intended player
ChatMessage msg = (ChatMessage) msgIn;
ChatMessage msgToSend = new ChatMessage( playerInfo.username,
"", msg.message );
PlayerInfo playerToSendTo = mapPlayerInfo.find( msg.to );
if (playerToSendTo != null)
connection.sendMessage( playerToSendTo.id, msgToSend );
}
// Handle GetPlayerMessage
else if ( c.getName().endsWith( "GetPlayerMessage" ) ) {
// Only send relevant information
Player playerToSend = player.cloneForClient();
GetPlayerMessage msgToSend = new GetPlayerMessage( player );
connection.sendMessage( idPlayer, msgToSend );
}
// Handle SwitchMainViewMessage
else if ( c.getName().endsWith( "SwitchMainViewMessage" ) ) {
SwitchMainViewMessage msg = (SwitchMainViewMessage) msgIn;
playerInfo.state.viewType = msg.viewType;
playerInfo.state.idViewingObject = msg.idObject;
playerInfo.state.idPlanetoid = msg.idPlanetoid;
playerInfo.state.idSolarSystem = msg.idSolarSystem;
playerInfo.state.idGalaxy = msg.idGalaxy;
// If we want a planetoid view,
if ( msg.viewType == PlayerState.MAIN_VIEW_SOLARSYSTEM ) {
playerInfo.state.viewType = PlayerState.MAIN_VIEW_SOLARSYSTEM;
}
}
// Handle ChangeLoginMessage
else if ( c.getName().endsWith( "ChangeLoginMessage" ) ) {
ChangeLoginMessage msg = (ChangeLoginMessage) msgIn;
ChangeLoginMessage msgToSend = new ChangeLoginMessage();
// If this username already exists, disallow the modification
if( mapPlayerInfo.find( msg.username ) != null ) {
msgToSend.bAccepted = false;
} else {
playerInfo.username = msg.username;
playerInfo.password = msg.password;
msgToSend.bAccepted = true;
}
msgToSend.username = playerInfo.username;
msgToSend.password = playerInfo.password;
connection.sendMessage( playerInfo.id, msgToSend );
}
} // if we have player info
} // while messages are available
sleep( DELAY_TIME );
}
} catch ( Exception e ) {
Debug.trace( "MessageProcessor.run() Exception " + e.getMessage() );
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -