From 7affec0006a788f142494f66242b9533f7e78059 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Mon, 20 Mar 2023 17:40:05 -0700 Subject: [PATCH] implementing websocket relay connection --- net/server/internal/api_signal.go | 52 ++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/net/server/internal/api_signal.go b/net/server/internal/api_signal.go index 8623e3dd..97257789 100644 --- a/net/server/internal/api_signal.go +++ b/net/server/internal/api_signal.go @@ -1,10 +1,60 @@ package databag import ( + "github.com/gorilla/websocket" + "encoding/json" "net/http" + "errors" ) -//Signal handler for websocket connection with call events +var bridgeRelay BridgeRelay; +var relayUpgrader = websocket.Upgrader{} + +//Status handler for websocket connection func Signal(w http.ResponseWriter, r *http.Request) { + + // accept websocket connection + conn, err := relayUpgrader.Upgrade(w, r, nil) + if err != nil { + ErrMsg(err) + return + } + defer conn.Close() + conn.SetReadLimit(APPBodyLimit) + + // receive announce + t, m, res := conn.ReadMessage() + if res != nil { + ErrMsg(res) + return + } + if t != websocket.TextMessage { + ErrMsg(errors.New("invalid websocket message type")) + return + } + var a Announce + if err := json.Unmarshal(m, &a); err != nil { + ErrMsg(err) + return + } + + // bind connection to bridge + bridgeRelay.SetConnection(conn, a.AppToken); + + for true { + t, m, res := conn.ReadMessage() + if res != nil { + ErrMsg(res) + break + } + if t != websocket.TextMessage { + ErrMsg(errors.New("invalid websocket message type")) + break + } + bridgeRelay.RelayMessage(conn, m); + } + + // release connection from bridge + bridgeRelay.ClearConnection(conn); }