fusenapi/server/websocket/internal/logic/ws_render_image_logic.go

71 lines
2.2 KiB
Go
Raw Normal View History

2023-07-26 06:35:29 +00:00
package logic
import (
"encoding/json"
2023-07-27 09:33:50 +00:00
"fusenapi/constants"
2023-07-26 06:35:29 +00:00
"fusenapi/server/websocket/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
2023-07-26 09:06:53 +00:00
// 云渲染属性
type renderProperty struct {
renderImageTask map[string]struct{} //需要渲染的图片任务
renderImageTaskCtlChan chan renderImageControlChanItem //渲染任务新增移除的控制通道
}
// 渲染任务新增移除的控制通道的数据
type renderImageControlChanItem struct {
Option int // 0删除 1添加
Key string //map的key
}
2023-07-27 09:41:36 +00:00
// 操作连接中渲染任务的增加/删除
func (w *wsConnectItem) operationRenderTask() {
for {
2023-07-27 09:33:50 +00:00
select {
case <-w.closeChan:
return
2023-07-27 09:41:36 +00:00
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:
}
2023-07-27 09:33:50 +00:00
}
2023-07-26 06:35:29 +00:00
}
2023-07-27 09:41:36 +00:00
}
// 渲染请求数据处理发送云渲染服务处理
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
}
2023-07-26 06:35:29 +00:00
logx.Info("收到请求云渲染图片数据:", renderImageData)
2023-07-26 07:05:53 +00:00
//把需要渲染的图片任务加进去
2023-07-27 07:46:07 +00:00
for _, productId := range renderImageData.ProductIds {
select {
case <-w.closeChan: //连接关闭了
return
default:
//加入渲染任务
2023-07-28 02:20:35 +00:00
key := w.getRenderImageMapKey(productId, renderImageData.TemplateTagId, renderImageData.LogoId, renderImageData.AlgorithmVersion)
2023-07-27 07:46:07 +00:00
w.renderProperty.renderImageTaskCtlChan <- renderImageControlChanItem{
Option: 1, //0删除 1添加
Key: key,
2023-07-26 08:23:38 +00:00
}
2023-07-28 09:39:28 +00:00
//发送给对应的流水线组装数据
2023-07-28 09:15:37 +00:00
if err := w.rabbitMq.SendMsg(constants.RABBIT_MQ_ASSEMBLE_RENDER_DATA, data); err != nil {
2023-07-31 02:08:56 +00:00
logx.Error("发送渲染任务数据到MQ失败:", string(data), "err:", err)
2023-07-28 09:15:37 +00:00
continue
}
2023-07-28 09:38:21 +00:00
logx.Info("发送渲染数据到rabbitmq成功:", string(data))
2023-07-26 07:01:59 +00:00
}
2023-07-26 06:35:29 +00:00
}
}