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

📄 networkclient.java

📁 用java开发的一个实施策略游戏源码 值得学习一下
💻 JAVA
字号:
/*
	Netwar
	Copyright (C) 2002  Daniel Grund, Kyle Kakligian, Jason Komutrattananon, & Brian Hibler.

	This file is part of Netwar.

	Netwar is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	Netwar is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with Netwar; if not, write to the Free Software
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package netwar.network;
import netwar.Netwar;
import netwar.game.*;
import netwar.settings.*;
import java.rmi.*;
import java.rmi.server.*;

/**
 * The Client network adapter that sends and recieves commands to and from the Netwar Server.
 * @author Group N2-Project Netwar
 * @author Jason Komutrattananon
 */
public class NetworkClient extends UnicastRemoteObject implements NetworkClientInterface{
	/**
	 * This players number.
	 */
	public int playerNumber;
	private NetworkServerInterface server;
	private boolean gameStarted = false;

	/**
	 * Creates a new instance of NetworkClient
	 * @param ipAddress is the ipAddress of the Server
	 */
	public NetworkClient(String ipAddress) throws RemoteException{
		try {
			server = (NetworkServerInterface) Naming.lookup ("//" + ipAddress + "/NetwarServer");
			playerNumber = server.callerID(this);
		} catch (Exception e) {
			System.out.println("NetworkClient Exception: " + e);
		}
	}

	/**
	 * Sends the pending local command to the server
	 * RMI type: Client
	 */
	public void send(){
		try {            
			// change index of array in following line when player info is made
			server.setCommand(playerNumber, (Command) Command.pendingCommands.dequeue());
		} catch(Exception e) {
			System.out.println ("Network Client Exception: " + e + "Couldn't send pendingCommand");
		}
	}

	/**
	 * The Netwar server will send the complete set of commands once it recieves them from every single player using this method
	 * RMI type: Server
	 * @param completeSetOfCommands the server sends this Command array which should be the complete set of commands for 1 cycle
	 */
	public void setCompleteSetOfCommands(Command[] completeSetOfCommands) throws RemoteException {
		Command.currentCommands=completeSetOfCommands;
		Command.commandsUpToDate=true;
	}

	/**
	 * Signals the local machine that the server wants to start the game.
	 * RMI type: Server
	 */
	public void startGame() throws RemoteException {
		gameStarted=true;
		Netwar.netwar.startGame();
	}

	/**
	 * Local method used to broadcast settings to all other players through the netwar server
	 * RMI type: Client
	 * @param callingPlayer is the playernumber that is calling this method
	 * @param playerSettings is the player's settings
	 * @param globalSettings is the settings made by player 1
	 */
	public void clientBroadcastSettings(int callingPlayer, PlayerSettings playerSettings, GlobalSettings globalSettings){
		try {
			server.broadcastSettings(callingPlayer, playerSettings, globalSettings);
		} catch (Exception e) {
			System.out.println("Remote Exception while trying to Broadcast settings from client to server: " + e);
		}
	}

	/**
	 * Remote method used to recieve settings and set them locally
	 * RMI type: Server
	 * @param gameSettings is the game settings that need to be propogated to all the players
	 */
	public void clientRecieveSettings(GameSettings gameSettings) throws RemoteException{
		GameSettings.currentSettings = gameSettings;
		Netwar.netwar.getDataViewer().repaint();
	}
	/**
	 * Invokes method on server to send the chat message to its intended recipient(s).
	 * RMI type: Client
	 * @param chatMessage The message to be sent out
	 * @param toWhom to which players the message gets sent to. if bool[1] and bool[5] are true then the message would get sent to players 1 and 5. bool[0]=true would broadcast to all players.
	 */
	public void sendChat(String chatMessage, boolean[] toWhom){
//		The following line is crashing the program		
//		netwar.Netwar.soundPlayer.play("sound/ChatSend.wav");
		try{
			server.sendChat(chatMessage, toWhom, playerNumber);
		}catch (Exception e) {
			System.out.println ("Exception while trying to send chat message: " + e );
		}
	}
	
	/**
	 * Invokes the method that displays the chat message to the player's screen
	 * RMI type: Server
	 * @param chatMessage The message to be displayed to the players screen.
	 */
	public void displayChat(String chatMessage) throws RemoteException{
//		The follwing line is crashing the program		
//		netwar.Netwar.soundPlayer.play("sound/ChatRecieve.wav");
            netwar.gui.Chatable view = (netwar.gui.Chatable)netwar.Netwar.netwar.getDataViewer();
            view.displayChat(chatMessage);
	}
	
	public boolean dropMeFromGame(){
	    try{
	    return server.dropMeFromGame(playerNumber);
	    } catch (Exception e) {
		System.out.println("Exception while trying to drop from game client side");
	    }
	    return false;
	}
	
	/**
	 * Sets the player's number. This method is primarily used for when a player is dropping out of the game before the game is started.
	 * RMI type: Server
	 * @param newPlayerNumber the new number that will be assigned to this player.
	 */
	public void setPlayerNumber(int newPlayerNumber) throws RemoteException{
		playerNumber=newPlayerNumber;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -