diff --git a/nginx/public/index.html b/nginx/public/index.html
index 5443216..8e566e3 100644
--- a/nginx/public/index.html
+++ b/nginx/public/index.html
@@ -2,11 +2,10 @@
- Office Hours
+ Office Hours Queue
-
Welcome!
diff --git a/nginx/public/officeHours.js b/nginx/public/officeHours.js
index 3514c14..ba55a90 100644
--- a/nginx/public/officeHours.js
+++ b/nginx/public/officeHours.js
@@ -11,7 +11,7 @@ function displayQueue(queueJSON) {
const queue = JSON.parse(queueJSON);
let formattedQueue = "";
for (const student of queue) {
- formattedQueue += student['username'] + " has been waiting since " + student['timestamp'] + "
"
+ formattedQueue += student['username'] + " has been waiting since " + student['timestamp'] + " and has joined in position " + student['position'] + "
"
}
document.getElementById("queue").innerHTML = formattedQueue;
}
diff --git a/src/main/scala/model/OfficeHoursServer.scala b/src/main/scala/model/OfficeHoursServer.scala
index 09ef61b..cc6481a 100644
--- a/src/main/scala/model/OfficeHoursServer.scala
+++ b/src/main/scala/model/OfficeHoursServer.scala
@@ -16,6 +16,7 @@ class OfficeHoursServer() {
var usernameToSocket: Map[String, SocketIOClient] = Map()
var socketToUsername: Map[SocketIOClient, String] = Map()
+ var numberInQueue: List[String] = List()
val config: Configuration = new Configuration {
setHostname("0.0.0.0")
@@ -60,7 +61,8 @@ class DisconnectionListener(server: OfficeHoursServer) extends DisconnectListene
class EnterQueueListener(server: OfficeHoursServer) extends DataListener[String] {
override def onData(socket: SocketIOClient, username: String, ackRequest: AckRequest): Unit = {
- server.database.addStudentToQueue(StudentInQueue(username, System.nanoTime()))
+ server.numberInQueue = server.numberInQueue :+ username
+ server.database.addStudentToQueue(StudentInQueue(username, System.nanoTime(), server.numberInQueue.size))
server.socketToUsername += (socket -> username)
server.usernameToSocket += (username -> socket)
server.server.getBroadcastOperations.sendEvent("queue", server.queueJSON())
@@ -71,7 +73,7 @@ class EnterQueueListener(server: OfficeHoursServer) extends DataListener[String]
class ReadyForStudentListener(server: OfficeHoursServer) extends DataListener[Nothing] {
override def onData(socket: SocketIOClient, dirtyMessage: Nothing, ackRequest: AckRequest): Unit = {
val queue = server.database.getQueue.sortBy(_.timestamp)
- if(queue.nonEmpty){
+ if(queue.nonEmpty) {
val studentToHelp = queue.head
server.database.removeStudentFromQueue(studentToHelp.username)
socket.sendEvent("message", "You are now helping " + studentToHelp.username)
diff --git a/src/main/scala/model/StudentInQueue.scala b/src/main/scala/model/StudentInQueue.scala
index 464108f..f1ac35f 100644
--- a/src/main/scala/model/StudentInQueue.scala
+++ b/src/main/scala/model/StudentInQueue.scala
@@ -16,19 +16,20 @@ object StudentInQueue {
output
}
- def apply(username: String, timestamp: Long): StudentInQueue = {
- new StudentInQueue(cleanString(username), timestamp)
+ def apply(username: String, timestamp: Long, position: Int): StudentInQueue = {
+ new StudentInQueue(cleanString(username), timestamp, position)
}
}
-class StudentInQueue(val username: String, val timestamp: Long) {
+class StudentInQueue(val username: String, val timestamp: Long, val position: Int) {
- def asJsValue(): JsValue ={
+ def asJsValue(): JsValue = {
val messageMap: Map[String, JsValue] = Map(
"username" -> Json.toJson(username),
- "timestamp" -> Json.toJson(timestamp)
+ "timestamp" -> Json.toJson(timestamp),
+ "position"-> Json.toJson(position)
)
Json.toJson(messageMap)
}
diff --git a/src/main/scala/model/database/Database.scala b/src/main/scala/model/database/Database.scala
index bbc9f7a..6a184f8 100644
--- a/src/main/scala/model/database/Database.scala
+++ b/src/main/scala/model/database/Database.scala
@@ -26,6 +26,7 @@ class Database extends DatabaseAPI{
statement.setString(1, student.username)
statement.setLong(2, student.timestamp)
+ statement.setInt(3, student.position)
statement.execute()
}
@@ -49,7 +50,8 @@ class Database extends DatabaseAPI{
while (result.next()) {
val username = result.getString("username")
val timestamp = result.getLong("timestamp")
- queue = new StudentInQueue(username, timestamp) :: queue
+ val position = result.getInt("position")
+ queue = new StudentInQueue(username, timestamp, position) :: queue
}
queue.reverse