package logic import ( "encoding/json" "fusenapi/constants" "fusenapi/server/websocket/internal/types" "github.com/zeromicro/go-zero/core/logx" ) // 云渲染属性 type renderProperty struct { renderImageTask map[string]struct{} //需要渲染的图片任务 renderImageTaskCtlChan chan renderImageControlChanItem //渲染任务新增移除的控制通道 } // 渲染任务新增移除的控制通道的数据 type renderImageControlChanItem struct { Option int // 0删除 1添加 Key string //map的key } // 操作连接中渲染任务的增加/删除 func (w *wsConnectItem) operationRenderTask() { for { select { case <-w.closeChan: return case data := <-w.renderProperty.renderImageTaskCtlChan: switch data.Option { case 0: //删除任务 delete(w.renderProperty.renderImageTask, data.Key) case 1: //新增任务 w.renderProperty.renderImageTask[data.Key] = struct{}{} default: } } } } // 渲染请求数据处理发送云渲染服务处理 func (w *wsConnectItem) SendToCloudRender(data []byte) { var renderImageData types.RenderImageReqMsg if err := json.Unmarshal(data, &renderImageData); err != nil { w.outChan <- w.respondDataFormat(constants.WEBSOCKET_ERR_DATA_FORMAT, "invalid format of websocket render image message:"+string(data)) logx.Error("invalid format of websocket render image message", err) return } logx.Info("收到请求云渲染图片数据:", renderImageData) //把需要渲染的图片任务加进去 for _, productId := range renderImageData.ProductIds { select { case <-w.closeChan: //连接关闭了 return default: //加入渲染任务 key := w.getRenderImageMapKey(productId, renderImageData.TemplateTagId, renderImageData.LogoId, renderImageData.AlgorithmVersion) w.renderProperty.renderImageTaskCtlChan <- renderImageControlChanItem{ Option: 1, //0删除 1添加 Key: key, } // TODO 数据发送给云渲染服务器 if err := w.rabbitMq.SendMsg(constants.RABBIT_MQ_ASSEMBLE_RENDER_DATA, data); err != nil { logx.Error("发送渲染任务数据到MQ失败:", string(data)) continue } logx.Info("发送渲染数据到rabbitmq成功:", string(data)) } } }