I urgently need help, im trying to complete a class which will be able of multiple - clients but is not doing the required puprose. Can anyone be assistance of what is needed to add for handling the clients ??
Thanks in advance!!
Expand|Select|Wrap|Line Numbers
- import java.util.ArrayList;
- import java.util.concurrent.Semaphore;
- class LODServer
- {
- ServerBase<ClientHandler> server = null;
- ArrayList<ClientHandler> clients = null;
- static final int TREASURE = 1;
- /* Larger positive numbers are several lots of treasure */
- static final int EMPTY = 0;
- static final int HEALTH = -1;
- static final int LANTERN = -2;
- static final int SWORD = -3;
- static final int ARMOUR = -4;
- static final int EXIT = -5;
- static final int WALL = -6;
- int mapWidth = 5;
- int mapHeight = 5;
- int map[/*mapHeight*/][/*mapWidth*/] =
- {
- {WALL, WALL, ARMOUR, WALL, WALL },
- {WALL, EXIT, EMPTY, TREASURE, TREASURE},
- {LANTERN, TREASURE, EMPTY, HEALTH, LANTERN },
- {WALL, SWORD, EMPTY, ARMOUR, TREASURE},
- {WALL, WALL, SWORD, WALL, WALL }
- };
- boolean gameStarted = false;
- boolean gameFinished = false;
- int goal = 2;
- Semaphore playerTurn = new Semaphore(1);
- public void setup (int port, int players, String map) {
- server = new ServerBase<ClientHandler>(ClientHandler.class, players, port, true);
- // Any set up for the game that can be done
- // before the clients connect goes here...
- // Map name is currently ignored
- System.err.println("Map loading is not implemented, \"" + map + "\" ignored.");
- // Start accepting incoming connections.
- System.out.print("Waiting for players to connect ... ");
- server.start();
- }
- public void play () throws InterruptedException {
- // Wait for all of the clients to connect
- clients = server.getConnections();
- System.out.println(" done.");
- // Any set up for the game that is specific
- // to the clients goes here.
- // Give each ClientHandler a reference to this object
- // and thus access to the game data
- for (ClientHandler c : clients) {
- c.server = this;
- }
- // Fix the player's starting location
- clients.get(0).x = 2;
- clients.get(0).y = 2;
- // Let each client know the amount of treasure it needs
- for (ClientHandler c : clients) {
- c.serverGoal(goal);
- }
- // Play the game!
- System.out.println("Starting the game.");
- gameStarted = true;
- while (gameFinished == false) {
- // Check that there is at least one player connected
- if (clients.size() <= 0) {
- System.out.println("Game abandoned");
- break;
- }
- // Each player takes a turn
- //for (ClientHandler c : clients) {
- ClientHandler c = clients.get(0);
- // Start turn
- System.out.println("Starting the turn of player \"" + c.name + "\"");
- c.startTurn(); // During this, c will acquire() the playerTurn semaphore
- // Wait for the player to finish their turn
- // (they will release() the semaphore at the end of their turn)
- try {
- playerTurn.acquire();
- } catch (InterruptedException e) {
- // This shouldn't happen in normal operation
- // If it happens, it is because this code
- // has been used in a larger bit of software
- // thus the wrapper can deal with this condition
- throw(e);
- }
- System.out.println("End of turn");
- // Check to see if the current player has won
- // (gameFinished is set to true in ClientHandler.clientEndTurn())
- if (gameFinished == true) {
- System.out.println("Game over, \"" + c.name + "\" is the winner");
- c.serverMessage("Congratulations " + c.name + " you won!");
- c.serverWin();
- for (ClientHandler d : clients) {
- if (d != c) {
- d.serverMessage("Sorry " + d.name + " it looks like " + c.name + " beat you.");
- d.serverLose();
- }
- }
- }
- // Release the semaphore so that the next player can start their turn
- playerTurn.release();
- //}
- }
- return;
- }
- // A simple helper function
- public static void printUsageAndDie(String error) {
- System.err.println(error);
- System.err.println("Usage:");
- System.err.println("\tjava LODServer <port> <players> <map>");
- System.exit(1);
- }
- public static void main(String args[])
- {
- if (args.length != 3) {
- printUsageAndDie("Incorrect number of command line arguements");
- } else {
- int port = Integer.parseInt(args[0]);
- if ((port <= 1024) || (port >= 65536)) {
- printUsageAndDie("Invalid port number");
- }
- int players = Integer.parseInt(args[1]);
- if (players < 0) {
- printUsageAndDie("Invalid number of users");
- }
- LODServer s = new LODServer();
- s.setup(port,players,args[2]);
- try {
- s.play();
- } catch (InterruptedException e) {
- System.err.println("Caught InterruptedException(?)");
- System.exit(1);
- }
- }
- }
- }