From 74c7b7082da5235d234c0ccf7bfc3f2135db56f6 Mon Sep 17 00:00:00 2001 From: dariotringali Date: Fri, 11 Dec 2020 19:16:15 -0500 Subject: [PATCH] Added a display of the position each student is in when they join the queue --- nginx/public/index.html | 3 +-- nginx/public/officeHours.js | 2 +- src/main/scala/model/OfficeHoursServer.scala | 6 ++++-- src/main/scala/model/StudentInQueue.scala | 11 ++++++----- src/main/scala/model/database/Database.scala | 4 +++- 5 files changed, 15 insertions(+), 11 deletions(-) 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