From 44c0e627bdcacb0444424f28f35d40c7e9634410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= <clement.pit-claudel@epfl.ch> Date: Thu, 28 Nov 2024 00:46:52 +0100 Subject: [PATCH] Implement WebSocketServer.shutdownApp --- .../main/scala/cs214/webapp/server/web/WebServer.scala | 2 +- .../cs214/webapp/server/web/WebSocketsCollection.scala | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala b/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala index 81dcc93..06129f2 100644 --- a/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala +++ b/jvm/src/main/scala/cs214/webapp/server/web/WebServer.scala @@ -80,7 +80,7 @@ object WebServer: instanceId private[web] def shutdownApp(instanceId: InstanceId): Unit = - // Remove references of this app + webSocketServer.shutdownApp(instanceId) val appId = apps.remove(instanceId).map(_.instance.appInfo.id) clocks.get(instanceId).map(_._2).foreach(_.set(false)) clocks.remove(instanceId) diff --git a/jvm/src/main/scala/cs214/webapp/server/web/WebSocketsCollection.scala b/jvm/src/main/scala/cs214/webapp/server/web/WebSocketsCollection.scala index ce0d30f..539621f 100644 --- a/jvm/src/main/scala/cs214/webapp/server/web/WebSocketsCollection.scala +++ b/jvm/src/main/scala/cs214/webapp/server/web/WebSocketsCollection.scala @@ -35,6 +35,14 @@ private[web] final class WebSocketsCollection(): require(!sessions.contains(instanceId)) sessions = sessions.updated(instanceId, Map.empty.withDefaultValue(Set.empty)) + def shutdownApp(instanceId: InstanceId): Unit = + for by_client <- sessions.values + channels <- by_client.values + channel <- channels + do + channel.send(cask.Ws.Close()) + sessions = sessions - instanceId + def connect(instanceId: String, userId: String) (implicit cc: castor.Context, log: cask.Logger): cask.WebsocketResult = if WebServer.apps.contains(instanceId) then -- GitLab