package socket import ( "context" "encoding/json" "matchmaking-system/internal/data" "matchmaking-system/internal/data/memory" "matchmaking-system/internal/data/socket/virtualData" "matchmaking-system/internal/data/tradedeal/virtual" "matchmaking-system/internal/pkg/flags" "matchmaking-system/internal/pkg/logging/applogger" "matchmaking-system/internal/pkg/setting" "time" ) // orderSubAdminContractSubscribeByOrder // // @Description: 管理员合约|持仓订单订阅|持仓浮动盈亏订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminContractSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminContractSubscribe { var hashList []virtual.ContractTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminContractSubscribe, field).Result() if err != nil { time.Sleep(5 * time.Second) continue } var msg virtual.ContractTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := virtualData.ContractOrderProcessing(setting.AdminContractSubscribe, 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.AdminContractSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminContractSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator contract subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels contract order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } } func (u *Client) orderSubAdminContractSubscribeBySum(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminContractSumSubscribe { priceSum, err := memory.ContractFloating.Get(flags.FloatingHy) if err != nil { time.Sleep(5 * time.Second) continue } result := &SymbolSumResult{ Symbol: psgMsg.Symbol, Price: string(priceSum), } priceByte, err := json.Marshal(result) if err != nil { time.Sleep(3 * time.Second) continue } _, ok := u.symbol.Load(psgMsg.Symbol) if ok { u.msg <- priceByte } else { applogger.Info("Administrator cancels contract order subscription.") return } } time.Sleep(2 * time.Second) } } // orderSubAdminSecondSubscribeByOrder // // @Description: 管理员秒合约持仓订单订阅 // @receiver u // @param psgMsg func (u *Client) orderSubAdminSecondSubscribeByOrder(psgMsg *SymbolMessage) { for { if psgMsg.Symbol == setting.AdminSecondSubscribe { var hashList []virtual.ContractTallyCache for _, field := range psgMsg.Order { fieldStr, err := data.Reds.HGet(context.Background(), setting.AdminSecondSubscribe, field).Result() if err != nil { time.Sleep(5 * time.Second) continue } var msg virtual.ContractTallyCache if err = json.Unmarshal([]byte(fieldStr), &msg); err != nil { time.Sleep(5 * time.Second) continue } hashList = append(hashList, msg) } for _, value := range hashList { orderModel := virtualData.SecondOrderProcessing(setting.AdminSecondSubscribe, 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.AdminSecondSubscribe, orderModel.OrderId).Err(); err != nil { applogger.Error("AdminSecondSubscribe.HDel:%v", err) continue } } orderStr, err := json.Marshal(orderModel) if err != nil { applogger.Error("Administrator contract subscription cache order error:%v", err) time.Sleep(5 * time.Second) continue } u.msg <- orderStr // 用户(挂单|持仓)订阅 } else { applogger.Info("Administrator cancels contract order subscription.") return } } } } time.Sleep(600 * time.Millisecond) } }