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
3 changes: 1 addition & 2 deletions nginx/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Office Hours</title>
<title>Office Hours Queue</title>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
</head>
<body>

<br/>

<h3 id="message">Welcome!</h3>
Expand Down
2 changes: 1 addition & 1 deletion nginx/public/officeHours.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'] + "<br/>"
formattedQueue += student['username'] + " has been waiting since " + student['timestamp'] + " and has joined in position " + student['position'] + "<br/>"
}
document.getElementById("queue").innerHTML = formattedQueue;
}
Expand Down
6 changes: 4 additions & 2 deletions src/main/scala/model/OfficeHoursServer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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())
Expand All @@ -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)
Expand Down
11 changes: 6 additions & 5 deletions src/main/scala/model/StudentInQueue.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
4 changes: 3 additions & 1 deletion src/main/scala/model/database/Database.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
Expand All @@ -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
Expand Down