Files
realy/socketapi/pinger.go

34 lines
625 B
Go

package socketapi
import (
"time"
"github.com/fasthttp/websocket"
"realy.lol/context"
"realy.lol/log"
)
func (a *A) Pinger(ctx context.T, ticker *time.Ticker, cancel context.F, remote string) {
log.T.F("running pinger for %s", remote)
defer func() {
cancel()
ticker.Stop()
_ = a.Listener.Conn.Close()
}()
var err error
for {
select {
case <-ticker.C:
err = a.Listener.Conn.WriteControl(websocket.PingMessage, nil,
time.Now().Add(DefaultPingWait))
if err != nil {
log.E.F("%s error writing ping: %v; closing websocket", remote, err)
return
}
case <-ctx.Done():
return
}
}
}