Some checks failed
Build and Push Docker Image / build-and-push (push) Has been cancelled
48 lines
818 B
Go
48 lines
818 B
Go
package handlers
|
|
|
|
import (
|
|
"log"
|
|
"sync"
|
|
|
|
"github.com/gofiber/websocket/v2"
|
|
)
|
|
|
|
var clients = make(map[*websocket.Conn]bool)
|
|
var clientsMutex sync.Mutex
|
|
|
|
func WsHandler(c *websocket.Conn) {
|
|
clientsMutex.Lock()
|
|
clients[c] = true
|
|
clientsMutex.Unlock()
|
|
|
|
defer func() {
|
|
clientsMutex.Lock()
|
|
delete(clients, c)
|
|
clientsMutex.Unlock()
|
|
c.Close()
|
|
}()
|
|
|
|
for {
|
|
// Just keep alive, ignore incoming messages
|
|
_, _, err := c.ReadMessage()
|
|
if err != nil {
|
|
log.Println("ws error:", err)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
func BroadcastProgress(message string) {
|
|
clientsMutex.Lock()
|
|
defer clientsMutex.Unlock()
|
|
|
|
for client := range clients {
|
|
err := client.WriteMessage(websocket.TextMessage, []byte(message))
|
|
if err != nil {
|
|
log.Println("ws broadcast error:", err)
|
|
client.Close()
|
|
delete(clients, client)
|
|
}
|
|
}
|
|
}
|