@@ -8,6 +8,7 @@ import (
"fusenapi/utils/auth"
"fusenapi/utils/basic"
"fusenapi/utils/file"
"strings"
"time"
"github.com/zeromicro/go-zero/core/logx"
@@ -38,6 +39,7 @@ func NewRenderNotifyLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Rend
func ( l * RenderNotifyLogic ) RenderNotify ( req * types . RenderNotifyReq , userinfo * auth . UserInfo ) ( resp * basic . Response ) {
logx . Info ( "收到unity返回消息----" )
req . TaskId = strings . Trim ( req . TaskId , " " )
if req . TaskId == "" {
logx . Error ( "渲染回调参数错误:任务标识" )
return resp . SetStatusWithMessage ( basic . CodeRequestParamsErr , "invalid param task_id" )
@@ -47,6 +49,15 @@ func (l *RenderNotifyLogic) RenderNotify(req *types.RenderNotifyReq, userinfo *a
return resp . SetStatusWithMessage ( basic . CodeRequestParamsErr , "invalid param image" )
}
unityRenderEndTime := time . Now ( ) . UTC ( ) . UnixMilli ( )
//解析出真的taskId跟wid
splitSlice := strings . Split ( req . TaskId , " " )
if len ( splitSlice ) != 2 {
logx . Error ( "渲染回调参数错误: task_id拆分得不到合理结果" )
return resp . SetStatusWithMessage ( basic . CodeRequestParamsErr , "invalid param task_id! ! " )
}
//重新赋值(很重要)
req . TaskId = splitSlice [ 0 ]
wid := splitSlice [ 1 ]
//存base64打印测试
/* f, _ := os.Create("b.txt")
defer f.Close()
@@ -73,41 +84,12 @@ func (l *RenderNotifyLogic) RenderNotify(req *types.RenderNotifyReq, userinfo *a
return resp . SetStatusWithMessage ( basic . CodeFileUploadErr , "failed to upload render resource image" )
}
uploadUnityRenderImageTakesTime := time . Now ( ) . UTC ( ) . UnixMilli ( ) - unityRenderEndTime
//传了唯一标识,则精确查找
if req . Wid != "" {
if value , ok := mapConnPool . Load ( req . Wid ) ; ok {
//断言连接
ws , ok := value . ( wsConnectItem )
if ! ok {
logx . Error ( "渲染回调断言websocket连接失败" )
return resp . SetStatusWithMessage ( basic . CodeFileUploadErr , "渲染回调断言websocket连接失败" )
}
//记录收到unity渲染结果时间以及上传渲染图耗时时间
ws . modifyRenderTaskProperty ( renderImageControlChanItem {
option : 2 ,
taskId : req . TaskId ,
taskProperty : renderTask {
unityRenderEndTime : unityRenderEndTime ,
uploadUnityRenderImageTakesTime : uploadUnityRenderImageTakesTime ,
} ,
} )
//发送处理并删除任务
ws . deleteRenderTask ( renderImageControlChanItem {
option : 0 , //0删除 1添加 2修改耗时属性
taskId : req . TaskId ,
renderNotifyImageUrl : uploadRes . ResourceUrl ,
} )
}
logx . Info ( "渲染回调成功,渲染结果图片为:" , uploadRes . ResourceUrl )
return resp . SetStatusWithMessage ( basic . CodeOK , "success" )
}
//遍历websocket链接把数据传进去
mapConnPool . Range ( func ( key , value any ) bool {
if value , ok := mapConnPool . Load ( wid ) ; ok {
//断言连接
ws , ok := value . ( wsConnectItem )
if ! ok {
logx . Error ( "渲染回调断言websocket连接失败" )
return true
return resp . SetStatusWithMessage ( basic . CodeFileUploadErr , "渲染回调断言websocket连接失败" )
}
//记录收到unity渲染结果时间以及上传渲染图耗时时间
ws . modifyRenderTaskProperty ( renderImageControlChanItem {
@@ -124,8 +106,7 @@ func (l *RenderNotifyLogic) RenderNotify(req *types.RenderNotifyReq, userinfo *a
taskId : req . TaskId ,
renderNotifyImageUrl : uploadRes . ResourceUrl ,
} )
return true
} )
}
logx . Info ( "渲染回调成功,渲染结果图片为:" , uploadRes . ResourceUrl )
return resp . SetStatusWithMessage ( basic . CodeOK , "success" )
}