websocket heartbeat is now simplier. Closes #121
This commit is contained in:
parent
a24247b6e8
commit
94f0aacc0a
1 changed files with 9 additions and 17 deletions
26
wsapi.go
26
wsapi.go
|
@ -170,14 +170,11 @@ type heartbeatOp struct {
|
||||||
Data int `json:"d"`
|
Data int `json:"d"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Session) sendHeartbeat(wsConn *websocket.Conn) error {
|
|
||||||
return wsConn.WriteJSON(heartbeatOp{1, int(time.Now().Unix())})
|
|
||||||
}
|
|
||||||
|
|
||||||
// heartbeat sends regular heartbeats to Discord so it knows the client
|
// heartbeat sends regular heartbeats to Discord so it knows the client
|
||||||
// is still connected. If you do not send these heartbeats Discord will
|
// is still connected. If you do not send these heartbeats Discord will
|
||||||
// disconnect the websocket connection after a few seconds.
|
// disconnect the websocket connection after a few seconds.
|
||||||
func (s *Session) heartbeat(wsConn *websocket.Conn, listening <-chan interface{}, i time.Duration) {
|
func (s *Session) heartbeat(wsConn *websocket.Conn, listening <-chan interface{}, i time.Duration) {
|
||||||
|
|
||||||
if listening == nil || wsConn == nil {
|
if listening == nil || wsConn == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -186,23 +183,18 @@ func (s *Session) heartbeat(wsConn *websocket.Conn, listening <-chan interface{}
|
||||||
s.DataReady = true
|
s.DataReady = true
|
||||||
s.Unlock()
|
s.Unlock()
|
||||||
|
|
||||||
// Send first heartbeat immediately because lag could put the
|
var err error
|
||||||
// first heartbeat outside the required heartbeat interval window.
|
|
||||||
err := s.sendHeartbeat(wsConn)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Error sending initial heartbeat:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ticker := time.NewTicker(i * time.Millisecond)
|
ticker := time.NewTicker(i * time.Millisecond)
|
||||||
for {
|
for {
|
||||||
|
err = wsConn.WriteJSON(heartbeatOp{1, int(time.Now().Unix())})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error sending heartbeat:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
err := s.sendHeartbeat(wsConn)
|
// continue loop and send heartbeat
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Error sending heartbeat:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
case <-listening:
|
case <-listening:
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue