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