diff --git a/jvm/src/main/scala/cs214/webapp/server/web/ServerApp.scala b/jvm/src/main/scala/cs214/webapp/server/web/ServerApp.scala
index 021e7b57731fc0240990397b7f70cd479072f702..d57b4fe9d61b166a438aa79e2bbf208fac87a572 100644
--- a/jvm/src/main/scala/cs214/webapp/server/web/ServerApp.scala
+++ b/jvm/src/main/scala/cs214/webapp/server/web/ServerApp.scala
@@ -89,6 +89,9 @@ private[web] abstract class ServerApp:
         case cask.Ws.Close(code, reason) =>
           println(f"[${appInfo.id}/$instanceId/$userId] close: $code/$reason")
           disconnect(userId, channel)
+        case cask.Ws.ChannelClosed() =>
+          println(f"[${appInfo.id}/$instanceId/$userId] channel closed")
+          disconnect(userId, channel)
         case cask.Ws.Text(data) =>
           handleMessage(userId, ujson.read(data))
       }