1、暂存
This commit is contained in:
218
services/excservice/bitget_receive.go
Normal file
218
services/excservice/bitget_receive.go
Normal file
@ -0,0 +1,218 @@
|
||||
package excservice
|
||||
|
||||
import (
|
||||
"go-admin/pkg/utility"
|
||||
|
||||
"github.com/bytedance/sonic"
|
||||
log "github.com/go-admin-team/go-admin-core/logger"
|
||||
)
|
||||
|
||||
/*
|
||||
Bitget用户订单订阅处理
|
||||
- @msg 消息内容
|
||||
- @listenType 订阅类型 0-现货 1-合约
|
||||
*/
|
||||
func ReceiveBitgetListen(msg []byte, listenType int, apiKey string) (reconnect bool, err error) {
|
||||
var dataMap map[string]interface{}
|
||||
err = sonic.Unmarshal(msg, &dataMap)
|
||||
|
||||
if err != nil {
|
||||
log.Error("接收Bitget ws 反序列化失败:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查是否是操作响应
|
||||
if op, exists := dataMap["op"]; exists {
|
||||
switch op {
|
||||
case "login":
|
||||
return handleBitgetLogin(dataMap, apiKey)
|
||||
case "subscribe":
|
||||
return handleBitgetSubscribe(dataMap, apiKey)
|
||||
case "unsubscribe":
|
||||
return handleBitgetUnsubscribe(dataMap, apiKey)
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否是数据推送
|
||||
if arg, exists := dataMap["arg"]; exists {
|
||||
return handleBitgetDataPush(dataMap, arg, listenType, apiKey)
|
||||
}
|
||||
|
||||
log.Info("未知Bitget事件 内容:", string(msg))
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// handleBitgetLogin 处理登录响应
|
||||
func handleBitgetLogin(dataMap map[string]interface{}, apiKey string) (bool, error) {
|
||||
if code, exists := dataMap["code"]; exists {
|
||||
if code == "0" || code == 0 {
|
||||
log.Info("Bitget WebSocket登录成功 key:%s", apiKey)
|
||||
} else {
|
||||
log.Error("Bitget WebSocket登录失败 key:%s code:%v", apiKey, code)
|
||||
return true, nil // 需要重连
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// handleBitgetSubscribe 处理订阅响应
|
||||
func handleBitgetSubscribe(dataMap map[string]interface{}, apiKey string) (bool, error) {
|
||||
if code, exists := dataMap["code"]; exists {
|
||||
if code == "0" || code == 0 {
|
||||
log.Info("Bitget WebSocket订阅成功 key:%s", apiKey)
|
||||
} else {
|
||||
log.Error("Bitget WebSocket订阅失败 key:%s code:%v", apiKey, code)
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// handleBitgetUnsubscribe 处理取消订阅响应
|
||||
func handleBitgetUnsubscribe(dataMap map[string]interface{}, apiKey string) (bool, error) {
|
||||
if code, exists := dataMap["code"]; exists {
|
||||
if code == "0" || code == 0 {
|
||||
log.Info("Bitget WebSocket取消订阅成功 key:%s", apiKey)
|
||||
} else {
|
||||
log.Error("Bitget WebSocket取消订阅失败 key:%s code:%v", apiKey, code)
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// handleBitgetDataPush 处理数据推送
|
||||
func handleBitgetDataPush(dataMap map[string]interface{}, arg interface{}, listenType int, apiKey string) (bool, error) {
|
||||
argMap, ok := arg.(map[string]interface{})
|
||||
if !ok {
|
||||
log.Error("Bitget数据推送参数格式错误 key:%s", apiKey)
|
||||
return false, nil
|
||||
}
|
||||
|
||||
channel, exists := argMap["channel"]
|
||||
if !exists {
|
||||
log.Error("Bitget数据推送缺少channel参数 key:%s", apiKey)
|
||||
return false, nil
|
||||
}
|
||||
|
||||
switch channel {
|
||||
case "account":
|
||||
return handleBitgetAccount(dataMap, listenType, apiKey)
|
||||
case "orders":
|
||||
return handleBitgetOrders(dataMap, listenType, apiKey)
|
||||
case "positions":
|
||||
return handleBitgetPositions(dataMap, listenType, apiKey)
|
||||
case "balance":
|
||||
return handleBitgetBalance(dataMap, listenType, apiKey)
|
||||
default:
|
||||
log.Info("收到Bitget未处理的频道数据 channel:%v key:%s", channel, apiKey)
|
||||
}
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// handleBitgetAccount 处理账户更新
|
||||
func handleBitgetAccount(dataMap map[string]interface{}, listenType int, apiKey string) (bool, error) {
|
||||
log.Info("收到Bitget账户更新 listenType:%d key:%s", listenType, apiKey)
|
||||
|
||||
data, exists := dataMap["data"]
|
||||
if !exists {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// 这里可以根据需要实现具体的账户更新处理逻辑
|
||||
// 类似于binanceservice.ChangeSpotOrder或binanceservice.ChangeFutureOrder
|
||||
|
||||
utility.SafeGo(func() {
|
||||
handleBitgetAccountUpdate(data, listenType, apiKey)
|
||||
})
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// handleBitgetOrders 处理订单更新
|
||||
func handleBitgetOrders(dataMap map[string]interface{}, listenType int, apiKey string) (bool, error) {
|
||||
log.Info("收到Bitget订单更新 listenType:%d key:%s", listenType, apiKey)
|
||||
|
||||
data, exists := dataMap["data"]
|
||||
if !exists {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
utility.SafeGo(func() {
|
||||
handleBitgetOrderUpdate(data, listenType, apiKey)
|
||||
})
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// handleBitgetPositions 处理持仓更新
|
||||
func handleBitgetPositions(dataMap map[string]interface{}, listenType int, apiKey string) (bool, error) {
|
||||
log.Info("收到Bitget持仓更新 listenType:%d key:%s", listenType, apiKey)
|
||||
|
||||
data, exists := dataMap["data"]
|
||||
if !exists {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
utility.SafeGo(func() {
|
||||
handleBitgetPositionUpdate(data, listenType, apiKey)
|
||||
})
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// handleBitgetBalance 处理余额更新
|
||||
func handleBitgetBalance(dataMap map[string]interface{}, listenType int, apiKey string) (bool, error) {
|
||||
log.Info("收到Bitget余额更新 listenType:%d key:%s", listenType, apiKey)
|
||||
|
||||
data, exists := dataMap["data"]
|
||||
if !exists {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
utility.SafeGo(func() {
|
||||
handleBitgetBalanceUpdate(data, listenType, apiKey)
|
||||
})
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// 具体的处理函数,可以根据业务需求实现
|
||||
|
||||
// handleBitgetAccountUpdate 处理账户更新的具体逻辑
|
||||
func handleBitgetAccountUpdate(data interface{}, listenType int, apiKey string) {
|
||||
// TODO: 实现具体的账户更新处理逻辑
|
||||
log.Info("处理Bitget账户更新 listenType:%d key:%s data:%v", listenType, apiKey, data)
|
||||
}
|
||||
|
||||
// handleBitgetOrderUpdate 处理订单更新的具体逻辑
|
||||
func handleBitgetOrderUpdate(data interface{}, listenType int, apiKey string) {
|
||||
// TODO: 实现具体的订单更新处理逻辑
|
||||
log.Info("处理Bitget订单更新 listenType:%d key:%s data:%v", listenType, apiKey, data)
|
||||
|
||||
// 这里可以参考binanceservice中的订单处理逻辑
|
||||
// 例如:更新数据库中的订单状态、触发回调等
|
||||
}
|
||||
|
||||
// handleBitgetPositionUpdate 处理持仓更新的具体逻辑
|
||||
func handleBitgetPositionUpdate(data interface{}, listenType int, apiKey string) {
|
||||
// TODO: 实现具体的持仓更新处理逻辑
|
||||
log.Info("处理Bitget持仓更新 listenType:%d key:%s data:%v", listenType, apiKey, data)
|
||||
}
|
||||
|
||||
// handleBitgetBalanceUpdate 处理余额更新的具体逻辑
|
||||
func handleBitgetBalanceUpdate(data interface{}, listenType int, apiKey string) {
|
||||
// TODO: 实现具体的余额更新处理逻辑
|
||||
log.Info("处理Bitget余额更新 listenType:%d key:%s data:%v", listenType, apiKey, data)
|
||||
}
|
||||
|
||||
// getBitgetWsTypeName 获取WebSocket类型名称
|
||||
func getBitgetWsTypeName(listenType int) string {
|
||||
switch listenType {
|
||||
case 0:
|
||||
return "现货"
|
||||
case 1:
|
||||
return "合约"
|
||||
default:
|
||||
return "未知"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user