Merge branch 'develop' into feature/auth

This commit is contained in:
eson 2023-08-11 11:31:34 +08:00
commit c40cd1e180
4 changed files with 76 additions and 13 deletions

View File

@ -15,6 +15,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/gorilla/websocket"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
) )
@ -115,6 +116,7 @@ type Backend struct {
HttpAddress string HttpAddress string
Client *http.Client Client *http.Client
Handler http.HandlerFunc Handler http.HandlerFunc
Dialer *websocket.Dialer
} }
func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Backend { func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Backend {
@ -150,6 +152,60 @@ func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Bac
// 创建处理请求的函数 // 创建处理请求的函数
handleRequest := func(w http.ResponseWriter, r *http.Request) { handleRequest := func(w http.ResponseWriter, r *http.Request) {
if websocket.IsWebSocketUpgrade(r) {
//todo: 建立websocket的代理
target := url.URL{Scheme: "ws", Host: strings.Split(backend.HttpAddress, "//")[1], Path: r.URL.Path}
var transfer = func(src, dest *websocket.Conn) {
for {
mType, msg, err := src.ReadMessage()
if err != nil {
log.Println(err)
break
}
err = dest.WriteMessage(mType, msg)
if err != nil {
log.Println(err)
break
}
}
src.Close()
dest.Close()
}
header := r.Header.Clone()
// log.Println(target.String())
header.Del("Sec-Websocket-Extensions")
header.Del("Upgrade")
header.Del("Sec-Websocket-Key")
header.Del("Sec-Websocket-Version")
header.Del("Connection")
// header.Del("Origin")
proxyConn, _, err := backend.Dialer.Dial(target.String(), header)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// defer proxyConn.Close()
upgrader := websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true },
}
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
return
}
// defer conn.Close()
go transfer(proxyConn, conn)
// go transfer(conn, proxyConn)
return
}
// 解析目标URL包含了查询参数 // 解析目标URL包含了查询参数
targetURL, err := url.Parse(httpAddress + r.URL.String()) targetURL, err := url.Parse(httpAddress + r.URL.String())
if err != nil { if err != nil {

View File

@ -22,6 +22,8 @@ run_server() {
cd - > /dev/null cd - > /dev/null
} }
find /tmp/go-build* -mmin +5 -delete
# 列出所有服务器目录 # 列出所有服务器目录
server_dirs=() # 初始化一个空数组 server_dirs=() # 初始化一个空数组

View File

@ -40,11 +40,13 @@ func (m *MqConsumerRenderAssemble) Run(ctx context.Context, data []byte) error {
} }
val := ctx.Value("svcctx") val := ctx.Value("svcctx")
if val == nil { if val == nil {
return errors.New("svcctx is nil") logx.Error("svcctx is nil")
return nil //不返回错误就删除消息
} }
svcCtx, ok := val.(*svc.ServiceContext) svcCtx, ok := val.(*svc.ServiceContext)
if !ok { if !ok {
return errors.New("svcctx is nil!!") logx.Error("svcctx is nil!!")
return nil //不返回错误就删除消息
} }
rabbitmq := initalize.RabbitMqHandle{} rabbitmq := initalize.RabbitMqHandle{}
//获取模板产品第一个sku的模板 //获取模板产品第一个sku的模板
@ -52,10 +54,10 @@ func (m *MqConsumerRenderAssemble) Run(ctx context.Context, data []byte) error {
if err != nil { if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
logx.Error("template info is not found") logx.Error("template info is not found")
return nil return nil //不返回错误就删除消息
} }
logx.Error("failed to get template info:", err) logx.Error("failed to get template info:", err)
return err return nil //不返回错误就删除消息
} }
combineImage := "" //刀版图 combineImage := "" //刀版图
combineHash := hash.JsonHashKey(parseInfo) //区别于云渲染的taskid,这个用获取刀版图缓存 combineHash := hash.JsonHashKey(parseInfo) //区别于云渲染的taskid,这个用获取刀版图缓存
@ -63,13 +65,13 @@ func (m *MqConsumerRenderAssemble) Run(ctx context.Context, data []byte) error {
resource, err := svcCtx.AllModels.FsResource.FindOneById(ctx, combineHash) resource, err := svcCtx.AllModels.FsResource.FindOneById(ctx, combineHash)
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
logx.Error("failed to get resource :", err) logx.Error("failed to get resource :", err)
return err return nil //不返回错误就删除消息
} }
//如果不存在,则请求生成刀版图 //如果不存在,则请求生成刀版图
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
combineImage, err = getCombineImage(ctx, svcCtx, parseInfo, productTemplate, combineHash) combineImage, err = getCombineImage(ctx, svcCtx, parseInfo, productTemplate, combineHash)
if err != nil { if err != nil {
return err return nil //不返回错误就删除消息
} }
} else { } else {
combineImage = *resource.ResourceUrl combineImage = *resource.ResourceUrl
@ -79,10 +81,10 @@ func (m *MqConsumerRenderAssemble) Run(ctx context.Context, data []byte) error {
if err != nil { if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
logx.Error("element info is not found,model_id = ?", *productTemplate.ModelId) logx.Error("element info is not found,model_id = ?", *productTemplate.ModelId)
return nil return nil //不返回错误就删除消息
} }
logx.Error("failed to get element list,", err) logx.Error("failed to get element list,", err)
return err return nil //不返回错误就删除消息
} }
//组装数据 //组装数据
refletion := -1 refletion := -1
@ -94,7 +96,7 @@ func (m *MqConsumerRenderAssemble) Run(ctx context.Context, data []byte) error {
if element.Mode != nil && *element.Mode != "" { if element.Mode != nil && *element.Mode != "" {
if err = json.Unmarshal([]byte(*element.Mode), &mode); err != nil { if err = json.Unmarshal([]byte(*element.Mode), &mode); err != nil {
logx.Error("faile to parse element mode json:", err) logx.Error("faile to parse element mode json:", err)
return err return nil //不返回错误就删除消息
} }
} }
tempData := make([]map[string]interface{}, 0, 3) tempData := make([]map[string]interface{}, 0, 3)
@ -154,7 +156,7 @@ func (m *MqConsumerRenderAssemble) Run(ctx context.Context, data []byte) error {
b, _ := json.Marshal(sendData) b, _ := json.Marshal(sendData)
if err = rabbitmq.SendMsg(constants.RABBIT_MQ_TO_UNITY, b); err != nil { if err = rabbitmq.SendMsg(constants.RABBIT_MQ_TO_UNITY, b); err != nil {
logx.Error("发送渲染组装数据到rabbitmq失败", err) logx.Error("发送渲染组装数据到rabbitmq失败", err)
return err return nil //不返回错误就删除消息
} }
logx.Info("发送渲染组装数据到unity成功") logx.Info("发送渲染组装数据到unity成功")
return nil return nil
@ -180,7 +182,7 @@ func getCombineImage(ctx context.Context, svcCtx *svc.ServiceContext, parseInfo
"address": "", "address": "",
"phone": "", "phone": "",
"colors": []string{}, "colors": []string{},
"template_tagid": []string{}, "template_tagid": []string{"b1a"},
"is_crop": false, "is_crop": false,
"shape": "", "shape": "",
"ratio": 0, "ratio": 0,
@ -222,6 +224,9 @@ func getCombineImage(ctx context.Context, svcCtx *svc.ServiceContext, parseInfo
url := svcCtx.Config.PythonApi.CombineImageUrl url := svcCtx.Config.PythonApi.CombineImageUrl
header := make(map[string]string) header := make(map[string]string)
header["content-type"] = "application/json" header["content-type"] = "application/json"
/*f, _ := os.Create("a.txt")
defer f.Close()
f.Write(postData)*/
httpRsp, err := curl.ApiCall(url, "POST", header, bytes.NewReader(postData), 20) httpRsp, err := curl.ApiCall(url, "POST", header, bytes.NewReader(postData), 20)
if err != nil { if err != nil {
logx.Error("failed to combine logo:", err) logx.Error("failed to combine logo:", err)

View File

@ -100,10 +100,10 @@ func (w *wsConnectItem) renderImage(data []byte) {
d, _ := json.Marshal(tmpData) d, _ := json.Marshal(tmpData)
//发送给对应的流水线组装数据 //发送给对应的流水线组装数据
if err := w.rabbitMq.SendMsg(constants.RABBIT_MQ_ASSEMBLE_RENDER_DATA, d); err != nil { if err := w.rabbitMq.SendMsg(constants.RABBIT_MQ_ASSEMBLE_RENDER_DATA, d); err != nil {
logx.Error("发送渲染任务数据到MQ失败:", string(data), "err:", err) logx.Error("发送渲染任务数据到MQ失败:", string(d), "err:", err)
return return
} }
logx.Info("发送渲染数据到rabbitmq成功:", string(data)) logx.Info("发送渲染数据到rabbitmq成功:", string(d))
} }
// 操作连接中渲染任务的增加/删除 // 操作连接中渲染任务的增加/删除