Prevent data websocket heartbeat from running more than once, closes #43

This commit is contained in:
Bruce Marriner 2016-01-02 22:32:02 -06:00
parent 594d27626e
commit 825144012d
2 changed files with 16 additions and 0 deletions

View file

@ -16,6 +16,7 @@ import (
"fmt"
"net"
"strings"
"sync"
"time"
"github.com/gorilla/websocket"
@ -88,6 +89,11 @@ type Session struct {
// Managed state object, updated with events.
State *State
StateEnabled bool
// Mutex/Bools for locks that prevent accidents.
// TODO: Add channels.
heartbeatLock sync.Mutex
heartbeatRunning bool
}
// A Message stores all data related to a specific Discord message.

View file

@ -421,6 +421,16 @@ func (s *Session) Heartbeat(i time.Duration) {
return // TODO need to return an error.
}
// TODO: Make pretty and include chan
s.heartbeatLock.Lock()
if s.heartbeatRunning {
s.heartbeatLock.Unlock()
return
}
s.heartbeatRunning = true
defer func() { s.heartbeatRunning = false }()
s.heartbeatLock.Unlock()
// send first heartbeat immediately because lag could put the
// first heartbeat outside the required heartbeat interval window
ticker := time.NewTicker(i * time.Millisecond)