diff --git a/src/main/resources/protocol.txt b/src/main/resources/protocol.txt new file mode 100644 index 0000000000000000000000000000000000000000..6bdea08cf9b123ac72fdb2443dfaf32226020ccf --- /dev/null +++ b/src/main/resources/protocol.txt @@ -0,0 +1,23 @@ +=================================== +Project Add: +=================================== +{ + id + name +} + +=================================== +Project Update: +=================================== +{ + id + field (name) + value +} + +=================================== +Project Remove: +=================================== +{ + id +} \ No newline at end of file diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala index 24563e075c2770c711d2d8d4d915707e9bda4657..f6e247fdd8f1fd2275876237c2738f79308b51e1 100644 --- a/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala +++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala @@ -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]()) - } - this.sessions(session.getAccount) += serverSession - } else { - serverSession.close(500, "Invalid Key") + 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(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) - .filter(s => s != serverSession) - .foreach(s => s.getRemote.sendStringByFuture(text)) + 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()