145 lines
4.2 KiB
Go
145 lines
4.2 KiB
Go
|
|
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连接已停止")
|
|||
|
|
}
|