Add websocket to API

This commit is contained in:
haykam821
2020-01-07 18:01:20 -05:00
parent 62e38e7c45
commit ec58fc9e27

View File

@@ -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)
}
}