By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,417 Members | 1,856 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,417 IT Pros & Developers. It's quick & easy.

multi-client server [problem with code - please have a look]

P: 7
Hello,

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
  1.  
  2.  
  3. import java.util.ArrayList;
  4. import java.util.concurrent.Semaphore;
  5.  
  6. class LODServer
  7. {
  8.  
  9.     ServerBase<ClientHandler> server = null;
  10.  
  11.  
  12.     ArrayList<ClientHandler> clients = null;
  13.  
  14.     static final int TREASURE     = 1;
  15.     /* Larger positive numbers are several lots of treasure */
  16.     static final int EMPTY        = 0;
  17.     static final int HEALTH       = -1;
  18.     static final int LANTERN      = -2;
  19.     static final int SWORD        = -3;
  20.     static final int ARMOUR       = -4;
  21.     static final int EXIT         = -5;
  22.     static final int WALL         = -6;
  23.  
  24.     int mapWidth = 5;
  25.     int mapHeight = 5;
  26.     int map[/*mapHeight*/][/*mapWidth*/] =
  27.     {
  28.     {WALL,    WALL,     ARMOUR,  WALL,     WALL    },
  29.     {WALL,    EXIT,     EMPTY,   TREASURE, TREASURE},
  30.     {LANTERN, TREASURE, EMPTY,   HEALTH,   LANTERN },
  31.     {WALL,    SWORD,    EMPTY,   ARMOUR,   TREASURE},
  32.     {WALL,    WALL,     SWORD,   WALL,     WALL    }
  33.     };
  34.  
  35.     boolean gameStarted = false;
  36.     boolean gameFinished = false;
  37.     int goal = 2;        
  38.  
  39.     Semaphore playerTurn = new Semaphore(1);
  40.  
  41.  
  42.     public void setup (int port, int players, String map) {
  43.  
  44.  
  45.     server = new ServerBase<ClientHandler>(ClientHandler.class, players, port, true);
  46.  
  47.     // Any set up for the game that can be done
  48.     // before the clients connect goes here...
  49.  
  50.     // Map name is currently ignored
  51.     System.err.println("Map loading is not implemented, \"" + map + "\" ignored.");
  52.  
  53.  
  54.  
  55.     // Start accepting incoming connections.
  56.     System.out.print("Waiting for players to connect ... ");
  57.     server.start();
  58.     }
  59.  
  60.     public void play () throws InterruptedException {
  61.  
  62.     // Wait for all of the clients to connect
  63.     clients = server.getConnections();
  64.     System.out.println(" done.");
  65.  
  66.     // Any set up for the game that is specific
  67.     // to the clients goes here.
  68.  
  69.  
  70.     // Give each ClientHandler a reference to this object
  71.     // and thus access to the game data
  72.     for (ClientHandler c : clients) {
  73.         c.server = this;
  74.     }
  75.  
  76.     // Fix the player's starting location
  77.     clients.get(0).x = 2;
  78.     clients.get(0).y = 2;
  79.  
  80.     // Let each client know the amount of treasure it needs
  81.     for (ClientHandler c : clients) {
  82.         c.serverGoal(goal);
  83.     }
  84.  
  85.     // Play the game!
  86.     System.out.println("Starting the game.");
  87.     gameStarted = true;
  88.     while (gameFinished == false) {
  89.  
  90.         // Check that there is at least one player connected
  91.         if (clients.size() <= 0) {
  92.         System.out.println("Game abandoned");
  93.         break;
  94.         }
  95.  
  96.         // Each player takes a turn
  97.         //for (ClientHandler c : clients) {
  98.         ClientHandler c = clients.get(0);
  99.  
  100.         // Start turn
  101.         System.out.println("Starting the turn of player \"" + c.name + "\"");
  102.         c.startTurn();     // During this, c will acquire() the playerTurn semaphore
  103.  
  104.         // Wait for the player to finish their turn
  105.         // (they will release() the semaphore at the end of their turn)
  106.         try {
  107.         playerTurn.acquire();
  108.         } catch (InterruptedException e) {
  109.         // This shouldn't happen in normal operation
  110.         // If it happens, it is because this code
  111.         // has been used in a larger bit of software
  112.         // thus the wrapper can deal with this condition
  113.         throw(e);
  114.         }
  115.         System.out.println("End of turn");
  116.  
  117.         // Check to see if the current player has won
  118.         // (gameFinished is set to true in ClientHandler.clientEndTurn())
  119.         if (gameFinished == true) {
  120.  
  121.         System.out.println("Game over, \"" + c.name + "\" is the winner");
  122.  
  123.         c.serverMessage("Congratulations " + c.name + " you won!");
  124.         c.serverWin();
  125.  
  126.         for (ClientHandler d : clients) {
  127.  
  128.             if (d != c) {
  129.             d.serverMessage("Sorry " + d.name + " it looks like " + c.name + " beat you.");
  130.             d.serverLose();
  131.             }
  132.  
  133.         }
  134.  
  135.         }
  136.  
  137.         // Release the semaphore so that the next player can start their turn
  138.         playerTurn.release();
  139.         //}
  140.  
  141.  
  142.     }
  143.  
  144.     return;
  145.  
  146.     }
  147.  
  148.     // A simple helper function
  149.     public static void printUsageAndDie(String error) {
  150.     System.err.println(error);
  151.     System.err.println("Usage:");
  152.     System.err.println("\tjava LODServer <port> <players> <map>");
  153.     System.exit(1);
  154.     }
  155.  
  156.   public static void main(String args[])
  157.     {
  158.  
  159.     if (args.length != 3) {
  160.         printUsageAndDie("Incorrect number of command line arguements");
  161.     } else {
  162.         int port = Integer.parseInt(args[0]);
  163.  
  164.         if ((port <= 1024) || (port >= 65536)) {
  165.         printUsageAndDie("Invalid port number");
  166.         }
  167.  
  168.         int players = Integer.parseInt(args[1]);
  169.         if (players < 0) {
  170.         printUsageAndDie("Invalid number of users");
  171.         }
  172.  
  173.         LODServer s = new LODServer();
  174.  
  175.         s.setup(port,players,args[2]);
  176.  
  177.         try {
  178.         s.play();
  179.         } catch (InterruptedException e) {
  180.         System.err.println("Caught InterruptedException(?)");
  181.         System.exit(1);
  182.         }
  183.     }
  184.     }
  185. }
  186.  
  187.  
Mar 13 '08 #1
Share this question for a faster answer!
Share on Google+

Post your reply

Sign in to post your reply or Sign up for a free account.