From ec58fc9e27b451620607d24841d0249f0a2e4d06 Mon Sep 17 00:00:00 2001 From: haykam821 <24855774+haykam821@users.noreply.github.com> Date: Tue, 7 Jan 2020 18:01:20 -0500 Subject: [PATCH] Add websocket to API --- bridge/api/api.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/bridge/api/api.go b/bridge/api/api.go index 9a3f1178..3484bf1c 100644 --- a/bridge/api/api.go +++ b/bridge/api/api.go @@ -8,9 +8,10 @@ import ( "github.com/42wim/matterbridge/bridge" "github.com/42wim/matterbridge/bridge/config" + "github.com/gorilla/websocket" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" - "github.com/zfjagann/golang-ring" + ring "github.com/zfjagann/golang-ring" ) type API struct { @@ -44,6 +45,7 @@ func New(cfg *bridge.Config) bridge.Bridger { e.GET("/api/health", b.handleHealthcheck) e.GET("/api/messages", b.handleMessages) e.GET("/api/stream", b.handleStream) + e.GET("/api/socket", b.handleWebsocket) e.POST("/api/message", b.handlePostMessage) go func() { if b.GetString("BindAddress") == "" { @@ -128,3 +130,24 @@ func (b *API) handleStream(c echo.Context) error { time.Sleep(200 * time.Millisecond) } } + +func (b *API) handleWebsocket(c echo.Context) error { + conn, err := websocket.Upgrade(c.Response().Writer, c.Request(), nil, 1024, 1024) + if err != nil { + return err + } + + greet := config.Message{ + Event: config.EventAPIConnected, + Timestamp: time.Now(), + } + conn.WriteJSON(greet) + + for { + msg := b.Messages.Dequeue() + if msg != nil { + conn.WriteJSON(msg) + } + time.Sleep(200 * time.Millisecond) + } +}