gracefully exit websocket on server exit

This commit is contained in:
Roland Osborne 2022-01-14 14:14:51 -08:00
parent a9ce9c938e
commit 2327c774f3

View File

@ -30,6 +30,7 @@ type accountRevision struct {
}
var wsSync sync.Mutex
var wsExit = make(chan bool, 1)
var statusListener = make(map[uint][]chan<-[]byte)
var upgrader = websocket.Upgrader{}
@ -52,7 +53,7 @@ func Status(w http.ResponseWriter, r *http.Request) {
err = store.DB.Model(&Revision{}).Where("ID = ?", act).First(&ar).Error
if err != nil {
log.Println("Status - failed to get account revision")
return
// return
}
rev := getRevision(ar)
@ -78,13 +79,20 @@ func Status(w http.ResponseWriter, r *http.Request) {
defer RemoveStatusListener(act, c)
// send revision until channel is closed
for msg := range c {
err = conn.WriteMessage(websocket.TextMessage, msg)
if err != nil {
log.Println("Status - failed to send revision, closing")
return
}
}
for {
select {
case msg := <-c:
err = conn.WriteMessage(websocket.TextMessage, msg)
if err != nil {
log.Println("Status - failed to send revision, closing")
return
}
case <-wsExit:
log.Println("Status - server exit")
wsExit<-true
return
}
}
}
func getRevision(rev accountRevision) Revision {
@ -99,6 +107,10 @@ func getRevision(rev accountRevision) Revision {
return r
}
func ExitStatus() {
wsExit <- true
}
func SetStatus(act uint) {
// get revisions for the account