?? networkclient.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;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -