Files
exchange_go/config/serverinit/bitget_init.go

145 lines
4.2 KiB
Go
Raw Normal View History

2025-10-14 19:58:59 +08:00
package serverinit
import (
"go-admin/config"
"go-admin/models"
"go-admin/pkg/httputils"
"go-admin/pkg/utility"
"go-admin/services/bitgetservice"
log "github.com/go-admin-team/go-admin-core/logger"
"github.com/robfig/cron/v3"
)
// BitgetInit 初始化Bitget交易所
func BitgetMarketInit() error {
// 设置代理(如果配置了的话)
httputils.InitProxy(config.ExtConfig.ProxyUrl)
log.Info("初始化Bitget交易对-开始")
spotData := make(map[string]models.TradeSet, 0)
futData := make(map[string]models.TradeSet, 0)
err := bitgetservice.GetAndReloadSymbols(&spotData, 1)
if err != nil {
log.Error("初始化Bitget交易对失败可能是网络问题将跳过初始化:", err)
// 不返回错误,允许程序继续运行
return nil
}
err = bitgetservice.GetAndReloadSymbols(&futData, 2)
if err != nil {
log.Error("初始化Bitget合约交易对失败可能是网络问题将跳过初始化:", err)
// 不返回错误,允许程序继续运行
return nil
}
log.Info("初始化Bitget交易对-结束")
log.Info("初始化Bitget 24h行情-开始")
_, err = bitgetservice.InitSymbolsTicker24h(&spotData, 1)
if err != nil {
log.Error("初始化Bitget 24h行情失败可能是网络问题将跳过初始化:", err)
// 不返回错误,允许程序继续运行
return nil
}
_, err = bitgetservice.InitSymbolsTicker24h(&futData, 2)
if err != nil {
log.Error("初始化Bitget合约24h行情失败可能是网络问题将跳过初始化:", err)
// 不返回错误,允许程序继续运行
return nil
}
log.Info("初始化Bitget 24h行情-结束")
//现货行情订阅
spotSymbols := []string{}
for k, _ := range spotData {
spotSymbols = append(spotSymbols, k)
}
spotMaps := utility.SplitSlice(spotSymbols, 50)
bitgetSpot := bitgetservice.BitgetMarketSpotClient{}
for _, v := range spotMaps {
if err := bitgetSpot.Subscribe(v); err != nil {
log.Error("订阅Bitget现货行情失败", err)
return err
}
}
//合约行情订阅
futSymbols := []string{}
for k, _ := range futData {
futSymbols = append(futSymbols, k)
}
futMaps := utility.SplitSlice(futSymbols, 50)
bitgetFut := bitgetservice.BitgetMarketFutureClient{}
for _, v := range futMaps {
if err := bitgetFut.Subscribe(v); err != nil {
log.Error("订阅Bitget合约行情失败", err)
return err
}
}
// 启动定时任务
runBitgetJobs()
return nil
}
// runBitgetJobs 启动Bitget相关的定时任务
func runBitgetJobs() {
cronJob := cron.New()
// 每小时更新一次交易对信息
_, err := cronJob.AddFunc("@every 1h", func() {
log.Info("执行Bitget交易对更新任务")
data := make(map[string]models.TradeSet, 0)
if err := bitgetservice.GetAndReloadSymbols(&data, 1); err != nil {
log.Error("更新Bitget交易对失败", err)
}
})
if err != nil {
log.Error("添加Bitget交易对更新任务失败", err)
} else {
log.Info("添加Bitget交易对更新任务成功")
}
// 启动定时任务
cronJob.Start()
log.Info("Bitget定时任务启动完成")
}
// CreateBitgetPrivateWebSocket 创建Bitget私有WebSocket连接的示例函数
func CreateBitgetPrivateWebSocket(apiKey, apiSecret, passphrase, proxyType, proxyAddress string) {
log.Info("创建Bitget私有WebSocket连接 key:", apiKey)
// 现货WebSocket (wsType=0)
spotManager := bitgetservice.GetOrCreateBitgetWebSocketManager(
0, apiKey, apiSecret, passphrase, proxyType, proxyAddress)
spotManager.Start()
// 合约WebSocket (wsType=1)
futuresManager := bitgetservice.GetOrCreateBitgetWebSocketManager(
1, apiKey, apiSecret, passphrase, proxyType, proxyAddress)
futuresManager.Start()
log.Info("Bitget私有WebSocket连接已创建")
}
// StopBitgetPrivateWebSocket 停止Bitget私有WebSocket连接的示例函数
func StopBitgetPrivateWebSocket(apiKey string) {
log.Info("停止Bitget私有WebSocket连接 key:", apiKey)
// 停止现货WebSocket
bitgetservice.StopBitgetWebSocketManager(0, apiKey)
// 停止合约WebSocket
bitgetservice.StopBitgetWebSocketManager(1, apiKey)
log.Info("Bitget私有WebSocket连接已停止")
}