Optimize StatusLoop. Execute function when specified in OnWsConnect

This commit is contained in:
Wim 2017-07-01 23:28:16 +02:00
parent ba35212b67
commit a58a3e5000

View File

@ -65,6 +65,7 @@ type MMClient struct {
WsSequence int64 WsSequence int64
WsPingChan chan *model.WebSocketResponse WsPingChan chan *model.WebSocketResponse
ServerVersion string ServerVersion string
OnWsConnect func()
} }
func New(login, pass, team, server string) *MMClient { func New(login, pass, team, server string) *MMClient {
@ -724,6 +725,12 @@ func (m *MMClient) GetTeamId() string {
} }
func (m *MMClient) StatusLoop() { func (m *MMClient) StatusLoop() {
retries := 0
backoff := time.Second * 60
if m.OnWsConnect != nil {
m.OnWsConnect()
}
m.log.Debug("StatusLoop:", m.OnWsConnect)
for { for {
if m.WsQuit { if m.WsQuit {
return return
@ -734,14 +741,23 @@ func (m *MMClient) StatusLoop() {
select { select {
case <-m.WsPingChan: case <-m.WsPingChan:
m.log.Debug("WS PONG received") m.log.Debug("WS PONG received")
backoff = time.Second * 60
case <-time.After(time.Second * 5): case <-time.After(time.Second * 5):
m.Logout() if retries > 3 {
m.WsQuit = false m.Logout()
m.Login() m.WsQuit = false
go m.WsReceiver() m.Login()
if m.OnWsConnect != nil {
m.OnWsConnect()
}
go m.WsReceiver()
} else {
retries++
backoff = time.Second * 5
}
} }
} }
time.Sleep(time.Second * 60) time.Sleep(backoff)
} }
} }