diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index e3bb67db..f313acc6 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -179,6 +179,7 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use l.sendGetUniqueIdErrResponse(conn) return wsConnectItem{}, err } + renderCtx, renderCtxCancelFunc := context.WithCancel(l.ctx) ws := wsConnectItem{ conn: conn, userAgent: userAgent, @@ -192,7 +193,9 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use userId: userInfo.UserId, guestId: userInfo.GuestId, extendRenderProperty: extendRenderProperty{ - renderChan: make(chan websocket_data.RenderImageReqMsg, renderChanLen), + renderChan: make(chan websocket_data.RenderImageReqMsg, renderChanLen), + renderCtx: renderCtx, + renderCtxCancelFunc: renderCtxCancelFunc, }, } //保存连接 diff --git a/server/websocket/internal/logic/ws_render_image.go b/server/websocket/internal/logic/ws_render_image.go index f5a80572..2d20f1e5 100644 --- a/server/websocket/internal/logic/ws_render_image.go +++ b/server/websocket/internal/logic/ws_render_image.go @@ -3,6 +3,7 @@ package logic //处理websocket云渲染任务数据 import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -32,7 +33,11 @@ type renderProcessor struct { // 云渲染属性 type extendRenderProperty struct { - renderChan chan websocket_data.RenderImageReqMsg //渲染消息入口的缓冲队列 + renderChan chan websocket_data.RenderImageReqMsg //渲染消息入口的缓冲队列 + renderCtx context.Context //渲染控制上下文(用于切换模板标签/颜色取消之前发送的不相同的任务) + renderCtxCancelFunc context.CancelFunc //渲染控制上下文取消方法 + selectColorIndex int //选择的颜色索引 + templateTag string //模板标签 } // 处理分发到这里的数据 @@ -44,6 +49,16 @@ func (r *renderProcessor) allocationMessage(w *wsConnectItem, data []byte) { logx.Error("invalid format of websocket render image message", err) return } + if renderImageData.RenderData.TemplateTag != w.extendRenderProperty.templateTag || renderImageData.RenderData.TemplateTagColor.SelectedColorIndex != w.extendRenderProperty.selectColorIndex { + //赋值 + w.extendRenderProperty.templateTag = renderImageData.RenderData.TemplateTag + w.extendRenderProperty.selectColorIndex = renderImageData.RenderData.TemplateTagColor.SelectedColorIndex + //让之前的失效 + w.extendRenderProperty.renderCtxCancelFunc() + logx.Info("模板标签/颜色更换上下文取消") + //重新赋值 + w.extendRenderProperty.renderCtx, w.extendRenderProperty.renderCtxCancelFunc = context.WithCancel(w.logic.ctx) + } select { case <-w.closeChan: //已经关闭 return