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 81dcc93a1b3ec5c0a7c59581ddc7f14e0f5b5374..06129f2528ec4a2f68d20270d7a84550798ce0e7 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 ce0d30f96afc7efd2f495513d6fb2452d410d12e..539621fd63f6927f287016bcb8c5b5932c1cd6f1 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