commit inicial do projeto

This commit is contained in:
Júnior
2025-05-23 10:44:32 -03:00
commit 8f04473c0b
106 changed files with 5673 additions and 0 deletions

20
internal/ws/events.go Normal file
View File

@ -0,0 +1,20 @@
package ws
import (
"encoding/json"
"fmt"
)
// Emit envia um evento para todos os clientes conectados
func Emit(eventType string, data any) {
msg := map[string]any{
"type": eventType,
"data": data,
}
jsonMsg, err := json.Marshal(msg)
if err != nil {
fmt.Println("Erro ao serializar evento WebSocket:", err)
return
}
broadcast <- jsonMsg
}

44
internal/ws/hub.go Normal file
View File

@ -0,0 +1,44 @@
package ws
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true },
}
// Hub representa um cliente WebSocket
var clients = make(map[*websocket.Conn]bool)
var broadcast = make(chan []byte)
// StartHub inicia o hub de websocket
func StartHub() {
go func() {
for {
msg := <-broadcast
for client := range clients {
err := client.WriteMessage(websocket.TextMessage, msg)
if err != nil {
log.Printf("WebSocket erro: %v", err)
client.Close()
delete(clients, client)
}
}
}
}()
}
// HandleWS aceita conexões websocket
func HandleWS(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Printf("Erro ao fazer upgrade para websocket: %v", err)
return
}
clients[conn] = true
log.Println("Novo cliente WebSocket conectado")
}