From 58269ed541aa20d3c8ec1630ccab277464101626 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Fri, 11 Mar 2022 15:14:06 -0800 Subject: [PATCH] adding websocket ping/pong messages --- net/server/internal/api_status.go | 13 ++++++++++++- net/server/internal/logger.go | 1 - net/web/src/App.js | 25 +++++++++++++++++++------ 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/net/server/internal/api_status.go b/net/server/internal/api_status.go index c7385089..fa014b22 100644 --- a/net/server/internal/api_status.go +++ b/net/server/internal/api_status.go @@ -1,6 +1,7 @@ package databag import ( + "time" "errors" "sync" "net/http" @@ -44,7 +45,7 @@ func Status(w http.ResponseWriter, r *http.Request) { // extract token target and access target, access, ret := ParseToken(a.AppToken) if ret != nil { - ErrMsg(err) + ErrMsg(ret) return } @@ -76,6 +77,10 @@ func Status(w http.ResponseWriter, r *http.Request) { AddStatusListener(app.Account.ID, c) defer RemoveStatusListener(app.Account.ID, c) + // start ping pong ticker + ticker := time.NewTicker(60 * time.Second) + defer ticker.Stop() + // send revision until channel is closed for { select { @@ -84,6 +89,12 @@ func Status(w http.ResponseWriter, r *http.Request) { ErrMsg(err) return } + case <-ticker.C: + if err := conn.WriteMessage(websocket.PingMessage, nil); err != nil { + ErrMsg(err) + return + } + conn.SetReadDeadline(time.Now().Add(15 * time.Second)) case <-wsExit: LogMsg("exiting server") wsExit<-true diff --git a/net/server/internal/logger.go b/net/server/internal/logger.go index c4183a6a..6bef9af3 100644 --- a/net/server/internal/logger.go +++ b/net/server/internal/logger.go @@ -50,7 +50,6 @@ func ErrResponse(w http.ResponseWriter, code int, err error) { } func ErrMsg(err error) { - PrintMsg("IN ERR MSG") if !hideLog && err != nil { _, file, line, _ := runtime.Caller(1) p, _ := os.Getwd() diff --git a/net/web/src/App.js b/net/web/src/App.js index 5abfabc4..75727b45 100644 --- a/net/web/src/App.js +++ b/net/web/src/App.js @@ -55,7 +55,7 @@ function App() { const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [confirmed, setConfirmed] = useState('') - const [mode, setMode] = useState('login') + const [mode, setMode] = useState('') const [creatable, setCreatable] = useState(false) const [conflict, setConflict] = useState('') const [token, setToken] = useState('') @@ -63,11 +63,21 @@ function App() { const ws = useRef(null) useEffect(() => { - getAvailable().then(a => { - setAvailable(a > 0) - }).catch(err => { - console.log(err) - }) + let access = localStorage.getItem("access") + console.log("ACCESS", access) + + if (access == null) { + setMode('login') + getAvailable().then(a => { + setAvailable(a > 0) + }).catch(err => { + console.log(err) + }) + } + else { + setMode('logout') + connectStatus(access) + } }, []) @@ -110,6 +120,7 @@ function App() { ws.current.error = () => { console.log('ws error') } + localStorage.setItem("access", access) } const Logout = () => { @@ -171,6 +182,8 @@ function App() { const onLogout = () => { ws.current.onclose = () => {} ws.current.close(1000, "bye") + ws.current = null + localStorage.removeItem("access") setMode('login') }