From 085e19038b388bdd6cec0f6cc745346abc0f7a78 Mon Sep 17 00:00:00 2001 From: hhs <386998068@qq.com> Date: Sat, 13 Jun 2026 16:15:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Phase=205.3=20-=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20client.sessionMgr=20=E8=B0=83=E7=94=A8=20U?= =?UTF-8?q?pdateConfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/ws/handler.go | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/backend/internal/ws/handler.go b/backend/internal/ws/handler.go index 52f90e5..eb84af9 100644 --- a/backend/internal/ws/handler.go +++ b/backend/internal/ws/handler.go @@ -220,7 +220,7 @@ func serveWS(c *gin.Context, sessionMgr session.Manager, orch orchestrator.Orche DetailLevel: msg.Payload.DetailLevel, Language: msg.Payload.Language, } - if err := sessionMgr.UpdateConfig(context.Background(), sessionID, patch); err != nil { + if err := client.sessionMgr.UpdateConfig(context.Background(), sessionID, patch); err != nil { errors.SendWSError(client, errors.CodeInternalError, "", err) continue } @@ -229,11 +229,16 @@ func serveWS(c *gin.Context, sessionMgr session.Manager, orch orchestrator.Orche case "interrupt": logger.Log.Infow("interrupt received", "session", sessionID) - // 获取活跃请求 ID(实际 cancel 在 Phase 5 接入 orchestrator 后实现) - reqID, _ := sessionMgr.GetActiveRequestID(context.Background(), sessionID) + // 获取活跃请求 ID 并取消 + reqID, _ := client.sessionMgr.GetActiveRequestID(context.Background(), sessionID) if reqID != "" { - _ = sessionMgr.ClearActiveRequest(context.Background(), sessionID) - // TODO: 取消对应 context cancel func + client.mu.Lock() + if cancel, ok := client.cancelFuncs[reqID]; ok { + cancel() + delete(client.cancelFuncs, reqID) + } + client.mu.Unlock() + _ = client.sessionMgr.ClearActiveRequest(context.Background(), sessionID) } default: @@ -247,6 +252,15 @@ func serveWS(c *gin.Context, sessionMgr session.Manager, orch orchestrator.Orche close(done) + // 取消所有活跃请求 + client.mu.Lock() + for reqID, cancel := range client.cancelFuncs { + logger.Log.Infow("canceling active request on disconnect", "session", sessionID, "request", reqID) + cancel() + } + client.cancelFuncs = make(map[string]context.CancelFunc) + client.mu.Unlock() + // 断开连接时不销毁会话,让其自然过期(支持重连恢复) logger.Log.Infow("client disconnected", "session", sessionID) }