websocket.go 740 B
package ui
import (
"encoding/json"
"fmt"
"sync"
"github.com/labstack/echo"
"golang.org/x/net/websocket"
)
type socket struct {
conn *websocket.Conn
}
var ws socket
var wsMutex sync.Mutex
func (sock socket) send(msg interface{}) {
payload, err := json.Marshal(msg)
if err == nil && sock.conn != nil {
fmt.Fprint(sock.conn, string(payload))
}
}
func upgrader(c echo.Context) error {
websocket.Handler(func(conn *websocket.Conn) {
wsMutex.Lock()
ws.conn = conn
wsMutex.Unlock()
defer conn.Close()
for {
msg := ""
err := websocket.Message.Receive(conn, &msg)
if err != nil {
//c.Logger().Error(err)
break
}
fmt.Printf("%s\n", msg)
}
}).ServeHTTP(c.Response(), c.Request())
return nil
}