forked from CFC-Servers/cfc_chat_transit
Add Keepalive ping/pong (#46)
This commit is contained in:
parent
7f24b6c386
commit
dfa279b534
@ -22,6 +22,13 @@ hook.Add "Think", loadHook, ->
|
||||
with ChatTransit.WebSocket
|
||||
.reconnectTimerName = "CFC_ChatTransit_WebsocketReconnect"
|
||||
|
||||
.onMessage = (msg) =>
|
||||
if msg ~= "keepalive"
|
||||
logger\info "Received a not-keepalive message from the server:", msg
|
||||
return
|
||||
|
||||
\write "keepalive"
|
||||
|
||||
.onConnected = =>
|
||||
logger\info "Established websocket connection"
|
||||
timer.Remove .reconnectTimerName
|
||||
@ -76,6 +83,11 @@ ChatTransit.guard = (f, delay) -> (...) ->
|
||||
|
||||
return nil
|
||||
|
||||
hook.Add "ShutDown", "CFC_ChatTransit_WebsocketDisconnect", ->
|
||||
logger\info "Gracefully closing websocket.."
|
||||
ProtectedCall -> ChatTransit.WebSocket\closeNow!
|
||||
return nil
|
||||
|
||||
logger\info "Loading modules..."
|
||||
for f in *file.Find "cfc_chat_transit/server/modules/*.lua", "LUA"
|
||||
logger\info "Loading modules/#{f}"
|
||||
|
@ -1,16 +1,32 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/gorilla/websocket"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
var upgrader = websocket.Upgrader{}
|
||||
|
||||
func relay(w http.ResponseWriter, r *http.Request) {
|
||||
// TODO: Prevent multiple clients here
|
||||
func keepAlive(c *websocket.Conn, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
|
||||
select {
|
||||
case <-time.After(2 * time.Second):
|
||||
err := c.WriteMessage(websocket.PingMessage, []byte("keepalive"))
|
||||
if err != nil {
|
||||
log.Print("Received an error when sending keepalive. Exiting keepalive loop")
|
||||
return
|
||||
}
|
||||
case <-ctx.Done():
|
||||
log.Print("Request context is done. Existing keepalive loop")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func relay(w http.ResponseWriter, r *http.Request) {
|
||||
c, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Print("upgrade:", err)
|
||||
@ -19,6 +35,8 @@ func relay(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
defer c.Close()
|
||||
|
||||
go keepAlive(c, r)
|
||||
|
||||
for {
|
||||
_, message, err := c.ReadMessage()
|
||||
if err != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user