You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
271 lines
7.3 KiB
271 lines
7.3 KiB
2 months ago
|
package marketwsscliert
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"github.com/gorilla/websocket"
|
||
|
"github.com/robfig/cron"
|
||
|
"time"
|
||
|
"wss-pool/cmd/common"
|
||
|
"wss-pool/cmd/websocketcollect/us"
|
||
|
"wss-pool/cmd/websocketservice"
|
||
|
"wss-pool/config"
|
||
|
"wss-pool/dictionary"
|
||
|
"wss-pool/internal/data/business"
|
||
|
"wss-pool/logging/applogger"
|
||
|
"wss-pool/pkg/model"
|
||
|
)
|
||
|
|
||
|
var Cli websocketservice.User
|
||
|
|
||
|
// 数字币行情采集
|
||
|
func RunHBDataRedis(checkData string) {
|
||
|
HbMarketSpots(checkData)
|
||
|
HbContract(checkData)
|
||
|
}
|
||
|
|
||
|
// 火币现货行情数据
|
||
|
func HbMarketSpots(checkData string) {
|
||
|
switch checkData {
|
||
|
case "subscribeDepth": // 市场深度行情数据 8863
|
||
|
subscribeDepth(model.SymbolListString(dictionary.Depth))
|
||
|
case "subscribeLevelMbp": // 市场深度MBP行情数据(增量推送)(150挡) 8864
|
||
|
subscribeLevelMbp(model.SymbolListString([]string{}))
|
||
|
case "subscribeFullMbp": // 市场深度MBP行情数据(全量推送) 8865
|
||
|
subscribeFullMbp(model.SymbolListInt(dictionary.LevelsRefresh))
|
||
|
case "subscribeSubMbp": // 市场深度MBP行情数据(增量推送) 8866
|
||
|
subscribeSubMbp(model.SymbolListInt(dictionary.LevelsMbp))
|
||
|
case "subscribeBbo": // 买一卖一逐笔行情 8867
|
||
|
subscribeBbo(model.SymbolListString([]string{}))
|
||
|
case "subscribeKLine": // K线数据 8868
|
||
|
subscribeKLine(model.SymbolListString(dictionary.TimeCycle))
|
||
|
case "subscribeTrade": // 成交明细 8869
|
||
|
subscribeTrade(model.SymbolListString([]string{}))
|
||
|
case "subscribeLast24h": // 市场概要 8847
|
||
|
subscribeLast24h(model.SymbolListString([]string{}))
|
||
|
case "subscribeTicker": // 聚合行情(Ticker) 8848
|
||
|
subscribeTicker(model.SymbolListString([]string{}))
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 币本位永续合约行情数据
|
||
|
func HbContract(checkData string) {
|
||
|
switch checkData {
|
||
|
case "subscribeCtKline": // k线数据 8841
|
||
|
//加载配置数据
|
||
|
go GetModifyContract()
|
||
|
subscribeCtKline(model.SymbolCtListString(dictionary.ContractTime))
|
||
|
case "subscribeCtDepth": // 深度信息 8842
|
||
|
subscribeCtDepth(model.SymbolCtListString(dictionary.ContractDepth))
|
||
|
case "subscribeCtAddDepth": // 新增深度信息 8843
|
||
|
subscribeCtAddDepth(model.SymbolCtListString(dictionary.ContractAddDepth))
|
||
|
case "subscribeCtBbo": // 买一卖一行情数据 8844
|
||
|
subscribeCtBbo(model.SymbolCtListString([]string{}))
|
||
|
case "subscribeCtDetail": // 合约详情数据 8845
|
||
|
subscribeCtDetail(model.SymbolCtListString([]string{}))
|
||
|
case "subscribeCtTradeDetail": // 合约贸易详情数据 8846
|
||
|
subscribeCtTradeDetail(model.SymbolCtListString([]string{}))
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 美股行情采集
|
||
|
func ShareMarket(checkData string) {
|
||
|
// TODO: 不需要推送插针数据
|
||
|
go business.NewPinStock(common.GetRedisNoPin(config.Config.Redis.NoPinAss))
|
||
|
switch checkData {
|
||
|
case "usShare": // US
|
||
|
ticker := time.NewTicker(time.Second * 10)
|
||
|
defer ticker.Stop()
|
||
|
for {
|
||
|
select {
|
||
|
case <-ticker.C:
|
||
|
applogger.Info("Execute automatic subscription........")
|
||
|
if conn := subscribeFinnhub(); conn != nil {
|
||
|
subscribeMarketUsBak(conn)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 美股行情采集分发
|
||
|
func ShareMarketBak(checkData string) {
|
||
|
// TODO: 不需要推送插针数据
|
||
|
go business.NewPinStock(common.GetRedisNoPin(config.Config.Redis.NoPinAss))
|
||
|
switch checkData {
|
||
|
case "usShare":
|
||
|
ticker := time.NewTicker(time.Second * 10)
|
||
|
defer ticker.Stop()
|
||
|
for {
|
||
|
select {
|
||
|
case <-ticker.C:
|
||
|
if conn := subscribeDispense("ws", 7777); conn != nil {
|
||
|
webSocketsWrite(conn, "us", "subscribe")
|
||
|
subscribeMarketUsBakNew(conn)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 外汇行情采集分发
|
||
|
func ForexMarketBak(checkData string) {
|
||
|
switch checkData {
|
||
|
case "forex":
|
||
|
ticker := time.NewTicker(time.Second * 10)
|
||
|
defer ticker.Stop()
|
||
|
for {
|
||
|
select {
|
||
|
case <-ticker.C:
|
||
|
if conn := subscribeDispense("forexWs", 7778); conn != nil {
|
||
|
webSocketsWrite(conn, "forex", "subscribe")
|
||
|
pinInsertionRun()
|
||
|
subscribeMarketForexBakNew(conn)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 外汇行情天采集分发
|
||
|
func ForexMarketDayBak(checkData string) {
|
||
|
switch checkData {
|
||
|
case "forex":
|
||
|
ticker := time.NewTicker(time.Second * 10)
|
||
|
defer ticker.Stop()
|
||
|
for {
|
||
|
select {
|
||
|
case <-ticker.C:
|
||
|
if conn := subscribeDispense("forexWs", 7778); conn != nil {
|
||
|
webSocketsWrite(conn, "forexDay", "subscribe")
|
||
|
pinInsertionDayRun()
|
||
|
subscribeMarketDayForexBakNew(conn)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 外汇买一卖一报价采集分发
|
||
|
func ForexMarketQuoteBak(checkData string) {
|
||
|
switch checkData {
|
||
|
case "forex":
|
||
|
ticker := time.NewTicker(time.Second * 10)
|
||
|
defer ticker.Stop()
|
||
|
for {
|
||
|
select {
|
||
|
case <-ticker.C:
|
||
|
if conn := subscribeDispense("forexWs", 7778); conn != nil {
|
||
|
webSocketsWrite(conn, "quotes", "subscribe")
|
||
|
subscribeMarketForexQuoteBakNew(conn)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 外汇成交报价采集分发
|
||
|
func ForexMarketTradeBak(checkData string) {
|
||
|
switch checkData {
|
||
|
case "forex":
|
||
|
ticker := time.NewTicker(time.Second * 10)
|
||
|
defer ticker.Stop()
|
||
|
for {
|
||
|
select {
|
||
|
case <-ticker.C:
|
||
|
if conn := subscribeDispense("forexWs", 7778); conn != nil {
|
||
|
webSocketsWrite(conn, "trade", "subscribe")
|
||
|
subscribeMarketForexTradeBakNew(conn)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 外汇成交报价存储
|
||
|
func ForexMarketTradeBak2(checkData string) {
|
||
|
switch checkData {
|
||
|
case "forex":
|
||
|
ticker := time.NewTicker(time.Second * 10)
|
||
|
defer ticker.Stop()
|
||
|
for {
|
||
|
select {
|
||
|
case <-ticker.C:
|
||
|
if conn := subscribeDispense("forexWs", 7778); conn != nil {
|
||
|
webSocketsWrite(conn, "tradeStorage", "subscribe")
|
||
|
subscribeMarketForexTradeBak2New(conn)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 外汇成交报价数据清理
|
||
|
func ForexMarketClearTradeBak2(checkData string) {
|
||
|
switch checkData {
|
||
|
case "forex":
|
||
|
ticker := time.NewTicker(time.Second * 5)
|
||
|
defer ticker.Stop()
|
||
|
for {
|
||
|
select {
|
||
|
case <-ticker.C:
|
||
|
DeleteForexTrade()
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
applogger.Info("Please select the data source that needs to be connected......")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 股票分发推送
|
||
|
func webSocketsWrite(conn *websocket.Conn, topic, content string) {
|
||
|
message := us.Message{
|
||
|
Topic: topic,
|
||
|
Content: content,
|
||
|
}
|
||
|
msg, err := json.Marshal(message)
|
||
|
if err != nil {
|
||
|
applogger.Error("marshal:%v", err)
|
||
|
return
|
||
|
}
|
||
|
err = conn.WriteMessage(websocket.TextMessage, msg)
|
||
|
if err != nil {
|
||
|
applogger.Error("write:%v", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 外汇交易对更新闭盘价
|
||
|
func ForexUpdateClosePrice() {
|
||
|
// 创建一个cron调度器
|
||
|
c := cron.New()
|
||
|
// 添加任务,每天0点执行
|
||
|
err := c.AddFunc("0 0 0 * * 1-5", func() {
|
||
|
ForexUpdateCode()
|
||
|
})
|
||
|
if err != nil {
|
||
|
applogger.Error("", err)
|
||
|
}
|
||
|
// 启动cron调度器
|
||
|
c.Start()
|
||
|
// 阻塞主线程,防止程序退出
|
||
|
select {}
|
||
|
}
|