package socket import ( "context" "encoding/json" "matchmaking-system/internal/data" "matchmaking-system/internal/data/memory" "matchmaking-system/internal/data/socket/shareData" "matchmaking-system/internal/data/tradedeal/share" "matchmaking-system/internal/pkg/flags" "matchmaking-system/internal/pkg/logging/applogger" "matchmaking-system/internal/pkg/setting" "time" ) // orderSubAdminShareUsSubscribeByOrder // // @Description: 管理员美股|订单订阅|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareUsSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareUsSubscribe { var hashList []share.ShareUsTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareUsSubscribe, field).Result() if err != nil { continue } var msg share.ShareUsTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareUsOrderProcessing(setting.AdminShareUsSubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareUsSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminSecondSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator's US stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Warn("Administrator cancels subscription to US stock orders.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareUsSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareUsSumSubscribe { priceSum, err := memory.ShareUsFloating.Get(flags.FloatingUs) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels subscription to US stock orders.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareMysSubscribeByOrder // // @Description: 管理员马股|订单订阅|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareMysSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareMysSubscribe { var hashList []share.ShareMysTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareMysSubscribe, field).Result() if err != nil { continue } var msg share.ShareMysTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareMysOrderProcessing(setting.AdminShareMysSubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareMysSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareThaSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator's stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels subscription to horse stock orders.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareMysSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareMysSumSubscribe { priceSum, err := memory.ShareMysFloating.Get(flags.FloatingMys) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels subscription to horse stock orders.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareThaSubscribeByOrder // // @Description: 管理员泰股|订单订阅|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareThaSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareThaSubscribe { var hashList []share.ShareThaTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareThaSubscribe, field).Result() if err != nil { continue } var msg share.ShareThaTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareThaOrderProcessing(setting.AdminShareThaSubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareThaSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareThaSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator Tai Stock Subscription Cache Order Error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels subscription to Thai stock orders.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareThaSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareThaSumSubscribe { priceSum, err := memory.ShareThaFloating.Get(flags.FloatingTha) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels subscription to Thai stock orders.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareIdnSubscribeByOrder // // @Description: 管理员印尼股|订单订阅|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareIdnSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareIdnSubscribe { var hashList []share.ShareIdnTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareIdnSubscribe, field).Result() if err != nil { continue } var msg share.ShareIdnTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareIdnOrderProcessing(setting.AdminShareIdnSubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareIdnSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareIdnSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator Indonesia stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels Indonesian order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareIdnSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareIdnSumSubscribe { priceSum, err := memory.ShareIdnFloating.Get(flags.FloatingIdn) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels Indonesian stock order subscription.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareInrSubscribeByOrder // // @Description: 管理员-印度股|订单订阅|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareInrSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareInrSubscribe { var hashList []share.ShareInrTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), psgMsg.Symbol, field).Result() if err != nil { continue } var msg share.ShareInrTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareInrOrderProcessing(psgMsg.Symbol, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), psgMsg.Symbol, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareInrSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator India stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels India order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareInrSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareInrSumSubscribe { priceSum, err := memory.ShareInrFloating.Get(flags.FloatingInr) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels Indian stock order subscription.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareInrSubscribe // // @Description: 管理员-新加坡股|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareSgdSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareSgdSubscribe { var hashList []share.ShareSgdTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareSgdSubscribe, field).Result() if err != nil { continue } var msg share.ShareSgdTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareSgdOrderProcessing(setting.AdminShareSgdSubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareSgdSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareSgdSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator Singapore stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels Singapore order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareSgdSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareSgdSumSubscribe { priceSum, err := memory.ShareSgdFloating.Get(flags.FloatingSgd) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels Singapore stock order subscription.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareGbxSubscribeByOrder // // @Description: 管理员-英股|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareGbxSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareGbxSubscribe { var hashList []share.ShareGbxTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareGbxSubscribe, field).Result() if err != nil { continue } var msg share.ShareGbxTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareGbxOrderProcessing(setting.AdminShareGbxSubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareGbxSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareGbxSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator UK stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels UK order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareGbxSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareGbxSumSubscribe { priceSum, err := memory.ShareGbxFloating.Get(flags.FloatingGbx) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels UK stock order subscription.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareHkdSubscribeByOrder // // @Description: 管理员-港股|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareHkdSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.SubscribeAdminShareHkd { var hashList []share.ShareHkdTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareHkdSubscribe, field).Result() if err != nil { continue } var msg share.ShareHkdTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareHkdOrderProcessing(setting.AdminShareHkdSubscribe, 1, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareHkdSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareHkdSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator Hong Kong stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels Singapore order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareHkdSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareHkdSumSubscribe { priceSum, err := memory.ShareHkdFloating.Get(flags.FloatingHkd) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels Hong Kong stock order subscription.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareEurSubscribeByOrder // // @Description: 管理员-德股|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareEurSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareEurSubscribe { var hashList []share.ShareEurTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareEurSubscribe, field).Result() if err != nil { continue } var msg share.ShareEurTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareEurOrderProcessing(setting.AdminShareEurSubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareEurSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareEurSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator Eur stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels Eur order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareEurSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareEurSumSubscribe { priceSum, err := memory.ShareEurFloating.Get(flags.FloatingEur) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels Eur stock order subscription.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareFurSubscribeByOrder // // @Description: 管理员-法股|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareFurSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareFurSubscribe { var hashList []share.ShareFurTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareFurSubscribe, field).Result() if err != nil { continue } var msg share.ShareFurTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareFurOrderProcessing(setting.AdminShareFurSubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareFurSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareFurSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator Fur stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels Fur order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareFurSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareFurSumSubscribe { priceSum, err := memory.ShareFurFloating.Get(flags.FloatingFur) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels Fur stock order subscription.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareJpySubscribeByOrder // // @Description: 管理员-日股|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareJpySubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareJpySubscribe { var hashList []share.ShareJpyTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareJpySubscribe, field).Result() if err != nil { continue } var msg share.ShareJpyTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareJpyOrderProcessing(setting.AdminShareJpySubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareJpySubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareJpySubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator Jpy stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels Jpy order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareJpySubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareJpySumSubscribe { priceSum, err := memory.ShareJpyFloating.Get(flags.FloatingJpy) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels Jpy stock order subscription.") return } } time.Sleep(1 * time.Second) } } // orderSubAdminShareBrlSubscribeByOrder // // @Description: 管理员-巴西股|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminShareBrlSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareBrlSubscribe { var hashList []share.ShareBrlTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminShareBrlSubscribe, field).Result() if err != nil { continue } var msg share.ShareBrlTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := shareData.ShareBrlOrderProcessing(setting.AdminShareBrlSubscribe, value) if orderModel != nil { _, ok := u.symbol.Load(psgMsg.Symbol) if ok { // 清理[撤单|平仓]缓存队列 if orderModel.Status == flags.Cancel || orderModel.Status == flags.Close { if err := data.Reds.HDel(context.Background(), setting.AdminShareBrlSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminShareBrlSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator Brl stock subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels Brl order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminShareBrlSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminShareBrlSumSubscribe { priceSum, err := memory.ShareBrlFloating.Get(flags.FloatingBrl) if err != nil { continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels Brl stock order subscription.") return } } time.Sleep(1 * time.Second) } }