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