/** * Load game state from file * * @param path Path to file */ public void deserialize(String path) { try { for (int i = 0; i < getVehicles().size(); i++) { getVehicles().get(i).stopThread(); } for (int i = 0; i < getIntersections().size(); i++) { getIntersections().get(i).stopThread(); } Passenger p = passengers.poll(); while (p != null) { p.stopThread(); p = passengers.poll(); } vehicles = null; intersections = null; passengers = null; // DrawPanel.getInstance() = null; // VehicleInspector.getInstance() = null; _instance = null; // Just to make sure things are right Thread.sleep(500); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(new FileInputStream(path))); _instance = (WorldManager) in.readObject(); in.close(); Thread.sleep(500); announceWorldChange(); System.out.println("Deserialized!"); } catch (Exception e) { e.printStackTrace(); } }
/** * This method reports that a passenger is taking stairs (no elevator is available on the * appropriate floor). * * @param newPass Passenger object for this passenger */ private static void takingStairs(Passenger newPass) { System.out.print( "Passenger " + newPass.getName() + " arrives on floor " + newPass.getFloor() + "."); System.out.println(" Taking stairs."); } // end takingStairs
/** * Read and process each item in the simulation file. It reads each input item in the file. If a * PASSENGER entry, a passenger object is created, and the elevators are checked to see if one is * available to service this passenger. If so, the passenger is logically added to the elevator. * If an elevator is not available, the passenger must take the stairs. * * <p>If the input item is a TICK, it indicates that one time unit has passed. At EOF, the method * is invoked to shut the elevators down and perform the end of day processing. * * <p>If an error is detected at any time, this method returns the proper boolean to the calling * method. * * @return True or False to indicate an error */ private static boolean processSimulationFile() { // local constants used by this method final String PASSENGER = "passenger"; final String TICK = "tick"; final String SIMULATION_END = "done"; boolean done = false; // set when done boolean error = false; // set if error detected boolean addedOK = false; // set if no elevator is available Passenger newPass = null; // new passenger object Elevator availableEl = null; // elevator object // Read next token from file and process try { while (!done && !error && in.nextToken() != in.TT_EOF) { if (in.sval.equals(PASSENGER)) { // if a new passenger, create a new object, look // for an elevator and add to elevator. If elevator // is not available, passenger takes the stairs. newPass = newPassenger(); availableEl = findElevator(newPass); if (availableEl == null) takingStairs(newPass); else { System.out.print( "Passenger: " + newPass.getName() + " arrives on floor " + newPass.getFloor() + "."); addedOK = availableEl.addPassenger(newPass); if (!addedOK) { error = true; } } } else if (in.sval.equals(TICK)) { // token read from file is a time indicator recordTick(); } else if (in.sval.equals(SIMULATION_END)) { // end of file == end of workday done = true; } else { error = true; } } // end while if (in.nextToken() == in.TT_EOF) { // perform end of day reporting endOfDay(); } // catch for file exception } catch (IOException e) { error = true; } // end try return error; } // end processSimulationFile