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连接已停止") }