Skip to content
Snippets Groups Projects
Commit e26c9bff authored by Tobias Ullerich's avatar Tobias Ullerich
Browse files

Improve Code, add new protocol text file

parent dbb07084
No related branches found
No related tags found
No related merge requests found
===================================
Project Add:
===================================
{
id
name
}
===================================
Project Update:
===================================
{
id
field (name)
value
}
===================================
Project Remove:
===================================
{
id
}
\ No newline at end of file
......@@ -17,6 +17,8 @@ import scala.collection.{Map, mutable}
*/
@WebSocket class ProjectSyncHandler(sessionDao: Dao[account.Session, Int], connection: Connection) {
val SESSION_KEY_HEADER = "key"
// TODO mutable.HashSet --> Set
private var sessions: Map[Account, mutable.HashSet[Session]] = new mutable.HashMap[Account, mutable.HashSet[Session]]()
......@@ -27,33 +29,33 @@ import scala.collection.{Map, mutable}
)
@OnWebSocketConnect def onConnect(serverSession: Session): Unit = {
val key = serverSession.getUpgradeRequest.getHeader("key")
val key = serverSession.getUpgradeRequest.getHeader(SESSION_KEY_HEADER)
if (key == null) {
serverSession.close(500, "Invalid Key")
}
val sessions = sessionDao.queryForEq("key", key)
if (sessions.size() == 1) {
val session = sessions.get(0)
if (!this.sessions.contains(session.getAccount)) {
this.sessions += (session.getAccount -> new mutable.HashSet[Session]())
val session = account.Session.getSession(key, sessionDao)
session match {
case Some(s) =>
if (!this.sessions.contains(s.getAccount)) {
this.sessions += (s.getAccount -> new mutable.HashSet[Session]())
}
this.sessions(session.getAccount) += serverSession
} else {
serverSession.close(500, "Invalid Key")
this.sessions(s.getAccount) += serverSession
case None => serverSession.close(500, "Invalid Key")
}
}
@OnWebSocketClose def onClose(serverSession: Session, status: Int, reason: String): Unit = {
val key = serverSession.getUpgradeRequest.getHeader("key")
val key = serverSession.getUpgradeRequest.getHeader(SESSION_KEY_HEADER)
if (key == null) {
serverSession.close(500, "Invalid Key")
}
val sessions = sessionDao.queryForEq("key", key)
if (sessions.size() == 1) {
val session = sessions.get(0)
this.sessions(session.getAccount) -= serverSession
val session = account.Session.getSession(key, sessionDao)
session match {
case Some(s) =>
this.sessions(s.getAccount) -= serverSession
case None => serverSession.close(500, "Invalid Key")
}
}
......@@ -62,7 +64,7 @@ import scala.collection.{Map, mutable}
// Store in Database
try {
// Push to clients
val key = serverSession.getUpgradeRequest.getHeader("key")
val key = serverSession.getUpgradeRequest.getHeader(SESSION_KEY_HEADER)
if (key != null) {
val parser = new JsonParser()
......@@ -80,12 +82,13 @@ import scala.collection.{Map, mutable}
serverSession.close(500, "Invalid Key")
}
val sessions = sessionDao.queryForEq("key", key)
if (sessions.size() == 1) {
val session = sessions.get(0)
this.sessions(session.getAccount)
val session = account.Session.getSession(key, sessionDao)
session match {
case Some(s) =>
this.sessions(s.getAccount)
.filter(s => s != serverSession)
.foreach(s => s.getRemote.sendStringByFuture(text))
case None => serverSession.close(500, "Invalid Key")
}
} catch {
case e: Exception => e.printStackTrace()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment