| | |
| | | package client |
| | | |
| | | import ( |
| | | "context" |
| | | "fmt" |
| | | "math/rand" |
| | | "time" |
| | | |
| | | "gat1400Exchange/config" |
| | | "gat1400Exchange/pkg/logger" |
| | | "gat1400Exchange/vo" |
| | | ) |
| | | |
| | | func Init1400Client() { |
| | | func Init1400Client(ctx context.Context) { |
| | | if !config.ClientConf.Enable { |
| | | logger.Debug("GAT/1400 Client disabled") |
| | | return |
| | | } |
| | | |
| | | register() |
| | | go registerLoop(ctx) |
| | | go keepaliveLoop(ctx) |
| | | go syncTimeLoop(ctx) |
| | | |
| | | } |
| | | |
| | | func registerLoop(ctx context.Context) { |
| | | ticker := time.NewTicker(1 * time.Second) |
| | | for { |
| | | select { |
| | | case <-ctx.Done(): |
| | | unRegister() |
| | | return |
| | | case <-ticker.C: |
| | | if clientStatus != vo.StatusSuccess { |
| | | fmt.Println("register") |
| | | if !register() { |
| | | randNum := rand.Intn(300) + 1 |
| | | // 随机等待300s, 重新注册 |
| | | ticker.Reset(time.Duration(randNum) * time.Second) |
| | | } else { |
| | | ticker.Reset(1 * time.Second) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | func keepaliveLoop(ctx context.Context) { |
| | | var failCount int |
| | | ticker := time.NewTicker(time.Duration(config.ClientConf.HeartbeatInterval) * time.Second) |
| | | for { |
| | | select { |
| | | case <-ctx.Done(): |
| | | return |
| | | case <-ticker.C: |
| | | if status := keepalive(); status != vo.StatusSuccess { |
| | | failCount++ |
| | | |
| | | if failCount > config.ClientConf.HeartbeatFailCount { |
| | | clientStatus = status |
| | | } |
| | | } else { |
| | | failCount = 0 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | func syncTimeLoop(ctx context.Context) { |
| | | ticker := time.NewTicker(time.Duration(config.ClientConf.HeartbeatInterval*10) * time.Second) |
| | | for { |
| | | select { |
| | | case <-ctx.Done(): |
| | | return |
| | | case <-ticker.C: |
| | | syncTime() |
| | | } |
| | | } |
| | | } |