⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 messageprocessor.java

📁 Massively Multiplayer Space Trading and Combat game. This is an online strategy game, not a 3D space
💻 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 + -