Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions build_windows.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@ECHO OFF

echo Building binaries
%M2%\mvn clean install
26 changes: 25 additions & 1 deletion elevator-core/src/main/java/elevator/Building.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,30 @@ public synchronized int[] waitingUsersByFloors() {
return count;
}

public synchronized Set<WaitingUser> waitingUsers() {
Set<WaitingUser> waitingUsers = new HashSet<WaitingUser>();

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;
}
Expand Down Expand Up @@ -133,7 +157,7 @@ private synchronized Set<User> applyCommand(Command command) throws ElevatorIsBr
break;
case OPEN:
door = OPEN;
doneUsers = new HashSet<>();
doneUsers = new HashSet<User>();
for (User user : users) {
user.elevatorIsOpen(floor);
if (user.done()) {
Expand Down
6 changes: 6 additions & 0 deletions elevator-core/src/main/java/elevator/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -43,6 +44,7 @@ public class User {
floorToGo = max(randomFloor(), LOWER_FLOOR + 1);
}
currentFloor = initialFloor;
initialDirection = direction;

elevatorEngine.call(initialFloor, direction);
}
Expand Down Expand Up @@ -94,6 +96,10 @@ public Integer getInitialFloor() {
return initialFloor;
}

public Direction getInitialDirection() {
return initialDirection;
}

public Integer getFloorToGo() {
return floorToGo;
}
Expand Down
25 changes: 25 additions & 0 deletions elevator-core/src/main/java/elevator/WaitingUser.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,14 @@ public int[] waitingUsersByFloors() {
return building.waitingUsersByFloors();
}

public Set<WaitingUser> waitingUsers() {
return building.waitingUsers();
}

public boolean[] getFloorButtonStatesInElevator() {
return building.getFloorButtonStatesInElevator();
}

Boolean doorIsOpen() {
return Door.OPEN.equals(building.door());
}
Expand Down
23 changes: 23 additions & 0 deletions elevator-server/src/main/java/elevator/server/PlayerInfo.java
Original file line number Diff line number Diff line change
@@ -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 {

Expand All @@ -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;
Expand All @@ -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<WaitingUser> 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;
}
}

}
37 changes: 37 additions & 0 deletions elevator-server/src/main/webapp/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
5 changes: 4 additions & 1 deletion elevator-server/src/main/webapp/js/elevator.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions run_windows.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@ECHO OFF

echo Run server
%M2%\mvn --file elevator-server\pom.xml jetty:run