Jade/WebSocket.go

58 lines
1006 B
Go

package main
import (
"fmt"
"github.com/gofiber/contrib/websocket"
)
var userWSChannels = make(map[string]*websocket.Conn)
// Function to send events to all clients
func sendEvent(userID string, event string, data string) {
message := fmt.Sprintf(`{"event": "%s", "data": "%s"}`, event, data)
sendWSMessage(userID, message)
}
func sendWSMessage(userID string, message string) {
mu.Lock()
defer mu.Unlock()
conn, ok := userWSChannels[userID]
if !ok {
return
}
if err := conn.WriteMessage(websocket.TextMessage, []byte(message)); err != nil {
fmt.Println("write:", err)
conn.Close()
delete(userWSChannels, userID)
}
}
func handleWebSocket(c *websocket.Conn) {
userID := c.Query("userID")
if userID == "" {
c.Close()
return
}
mu.Lock()
userWSChannels[userID] = c
mu.Unlock()
defer func() {
mu.Lock()
delete(userWSChannels, userID)
mu.Unlock()
c.Close()
}()
for {
if _, _, err := c.ReadMessage(); err != nil {
fmt.Println("read:", err)
break
}
}
}