From 80afa790024c29813876ccd489dca5b77b85d8be Mon Sep 17 00:00:00 2001 From: fpellet Date: Tue, 24 Sep 2013 12:15:19 +0200 Subject: [PATCH 1/2] Add windows scripts Add scripts to build and run on windows --- build_windows.bat | 4 ++++ run_windows.bat | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 build_windows.bat create mode 100644 run_windows.bat diff --git a/build_windows.bat b/build_windows.bat new file mode 100644 index 0000000..5ed75f0 --- /dev/null +++ b/build_windows.bat @@ -0,0 +1,4 @@ +@ECHO OFF + +echo Building binaries +%M2%\mvn clean install \ No newline at end of file diff --git a/run_windows.bat b/run_windows.bat new file mode 100644 index 0000000..82d773f --- /dev/null +++ b/run_windows.bat @@ -0,0 +1,4 @@ +@ECHO OFF + +echo Run server +%M2%\mvn --file elevator-server\pom.xml jetty:run \ No newline at end of file From 634c9940918440d9ccaa4e8625b920aa2dba1176 Mon Sep 17 00:00:00 2001 From: fpellet Date: Tue, 24 Sep 2013 12:18:48 +0200 Subject: [PATCH 2/2] Add indicators on elevator Indicate the direction desired by user. Indicate the floor desired by user in elevator. --- .../src/main/java/elevator/Building.java | 26 ++++++++++++- .../src/main/java/elevator/User.java | 6 +++ .../src/main/java/elevator/WaitingUser.java | 25 +++++++++++++ .../java/elevator/server/ElevatorGame.java | 8 ++++ .../main/java/elevator/server/PlayerInfo.java | 23 ++++++++++++ elevator-server/src/main/webapp/js/app.js | 37 +++++++++++++++++++ .../src/main/webapp/js/elevator.js | 5 ++- 7 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 elevator-core/src/main/java/elevator/WaitingUser.java diff --git a/elevator-core/src/main/java/elevator/Building.java b/elevator-core/src/main/java/elevator/Building.java index f47f173..6c245f5 100644 --- a/elevator-core/src/main/java/elevator/Building.java +++ b/elevator-core/src/main/java/elevator/Building.java @@ -75,6 +75,30 @@ public synchronized int[] waitingUsersByFloors() { return count; } + public synchronized Set waitingUsers() { + Set waitingUsers = new HashSet(); + + for (User user : users) { + if (user.waiting()) { + waitingUsers.add(new WaitingUser(user)); + } + } + + return waitingUsers; + } + + public synchronized boolean[] getFloorButtonStatesInElevator() { + boolean[] states = new boolean[ElevatorEngine.HIGHER_FLOOR - ElevatorEngine.LOWER_FLOOR + 1]; + + for (User user : users) { + if (user.traveling()) { + states[user.getFloorToGo()] = true; + } + } + + return states; + } + public Door door() { return door; } @@ -133,7 +157,7 @@ private synchronized Set applyCommand(Command command) throws ElevatorIsBr break; case OPEN: door = OPEN; - doneUsers = new HashSet<>(); + doneUsers = new HashSet(); for (User user : users) { user.elevatorIsOpen(floor); if (user.done()) { diff --git a/elevator-core/src/main/java/elevator/User.java b/elevator-core/src/main/java/elevator/User.java index aa8941c..1913561 100644 --- a/elevator-core/src/main/java/elevator/User.java +++ b/elevator-core/src/main/java/elevator/User.java @@ -14,6 +14,7 @@ public class User { private final ElevatorEngine elevatorEngine; private final Integer initialFloor; + private final Direction initialDirection; private final Integer floorToGo; private Integer currentFloor; private Integer tickToGo; @@ -43,6 +44,7 @@ public class User { floorToGo = max(randomFloor(), LOWER_FLOOR + 1); } currentFloor = initialFloor; + initialDirection = direction; elevatorEngine.call(initialFloor, direction); } @@ -94,6 +96,10 @@ public Integer getInitialFloor() { return initialFloor; } + public Direction getInitialDirection() { + return initialDirection; + } + public Integer getFloorToGo() { return floorToGo; } diff --git a/elevator-core/src/main/java/elevator/WaitingUser.java b/elevator-core/src/main/java/elevator/WaitingUser.java new file mode 100644 index 0000000..5ed91f8 --- /dev/null +++ b/elevator-core/src/main/java/elevator/WaitingUser.java @@ -0,0 +1,25 @@ +package elevator; + +import elevator.Direction; +import elevator.User; + +import java.io.Serializable; + +public class WaitingUser implements Serializable +{ + private final int floorNum; + private final Direction direction; + + public WaitingUser(User user) { + this.floorNum = user.getInitialFloor(); + this.direction = user.getInitialDirection(); + } + + public int getFloorNum(){ + return floorNum; + } + + public Direction getDesiredDirection(){ + return direction; + } +} diff --git a/elevator-server/src/main/java/elevator/server/ElevatorGame.java b/elevator-server/src/main/java/elevator/server/ElevatorGame.java index e52c67e..781bd94 100644 --- a/elevator-server/src/main/java/elevator/server/ElevatorGame.java +++ b/elevator-server/src/main/java/elevator/server/ElevatorGame.java @@ -63,6 +63,14 @@ public int[] waitingUsersByFloors() { return building.waitingUsersByFloors(); } + public Set waitingUsers() { + return building.waitingUsers(); + } + + public boolean[] getFloorButtonStatesInElevator() { + return building.getFloorButtonStatesInElevator(); + } + Boolean doorIsOpen() { return Door.OPEN.equals(building.door()); } diff --git a/elevator-server/src/main/java/elevator/server/PlayerInfo.java b/elevator-server/src/main/java/elevator/server/PlayerInfo.java index 27a9b58..2cbd7c8 100644 --- a/elevator-server/src/main/java/elevator/server/PlayerInfo.java +++ b/elevator-server/src/main/java/elevator/server/PlayerInfo.java @@ -1,6 +1,11 @@ package elevator.server; +import elevator.Direction; +import elevator.WaitingUser; +import elevator.engine.ElevatorEngine; + import java.io.Serializable; +import java.util.Set; public class PlayerInfo implements Serializable { @@ -13,6 +18,9 @@ public class PlayerInfo implements Serializable { public final boolean doorIsOpen; public final String lastErrorMessage; public final String state; + public boolean[] upButtonStateByFloor; + public boolean[] downButtonStateByFloor; + public boolean[] floorButtonStatesInElevator; public PlayerInfo(ElevatorGame game, Player player) { email = player.email; @@ -24,6 +32,21 @@ public PlayerInfo(ElevatorGame game, Player player) { doorIsOpen = game.doorIsOpen(); lastErrorMessage = game.lastErrorMessage; state = game.state.toString(); + + initializeBuildingButtonStates(game.waitingUsers()); + floorButtonStatesInElevator = game.getFloorButtonStatesInElevator(); + } + + private void initializeBuildingButtonStates(Set waitingUsers) { + int floorNb = ElevatorEngine.HIGHER_FLOOR - ElevatorEngine.LOWER_FLOOR + 1; + upButtonStateByFloor = new boolean[floorNb]; + downButtonStateByFloor = new boolean[floorNb]; + + for (WaitingUser user : waitingUsers) { + boolean[] states = user.getDesiredDirection().equals(Direction.DOWN) ? downButtonStateByFloor : upButtonStateByFloor; + + states[user.getFloorNum()] = true; + } } } diff --git a/elevator-server/src/main/webapp/js/app.js b/elevator-server/src/main/webapp/js/app.js index fd4c477..1845ea1 100644 --- a/elevator-server/src/main/webapp/js/app.js +++ b/elevator-server/src/main/webapp/js/app.js @@ -65,6 +65,43 @@ angular.module('elevatorApp', ['ngCookies', 'md5', 'ui-gravatar', 'elevatorApp.s }); layer.add(peopleWaitingTheElevator); + if(player.upButtonStateByFloor[numberOfFloors - i]) + { + var upArrow = new Kinetic.Text({ + x: 57, + y: y + 11, + text: "▲", + fontSize: 10, + fontFamily: 'Calibri', + fill: 'green' + }); + layer.add(upArrow); + } + + if(player.downButtonStateByFloor[numberOfFloors - i]) + { + var downArrow = new Kinetic.Text({ + x: 57, + y: y + 20, + text: "▼", + fontSize: 10, + fontFamily: 'Calibri', + fill: 'grey' + }); + layer.add(downArrow); + } + + if(player.floorButtonStatesInElevator[numberOfFloors - i]) + { + var goIndicator = new Kinetic.Circle({ + x: widthOfFloor - 6, + y: y + 6, + radius: 3, + fill: 'green', + strokeWidth: 0 + }); + layer.add(goIndicator); + } } var yElevator = heightOfRoof + ((numberOfFloors - player.elevatorAtFloor) * heightOfFloor); diff --git a/elevator-server/src/main/webapp/js/elevator.js b/elevator-server/src/main/webapp/js/elevator.js index 2c6aefa..8493933 100644 --- a/elevator-server/src/main/webapp/js/elevator.js +++ b/elevator-server/src/main/webapp/js/elevator.js @@ -9,7 +9,10 @@ function ElevatorCtrl($scope, $timeout, $http, ElevatorAuth) { peopleInTheElevator: 0, doorIsOpen: false, lastErrorMessage: null, - state: 'RESUME' + state: 'RESUME', + upButtonStateByFloor: new Array(), + downButtonStateByFloor: new Array(), + floorButtonStatesInElevator: new Array(), }; $scope.loggedIn = ElevatorAuth.loggedIn;