You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1022 lines
28 KiB

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)
}
}