create initial frontend.

This commit is contained in:
emil28092005
2026-01-07 23:59:28 +03:00
parent df1a8f8040
commit 48d5e396d7
8 changed files with 388 additions and 5 deletions
+46
View File
@@ -0,0 +1,46 @@
package api
import (
"net/http"
"shagram/internal/websocket"
"github.com/gin-gonic/gin"
gws "github.com/gorilla/websocket"
)
var upgrader = gws.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true },
}
func WebSocketHandler(hub *websocket.Hub) gin.HandlerFunc {
return func(c *gin.Context) {
roomID := c.Param("room")
room := hub.GetOrCreateRoom(roomID)
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
return
}
client := &websocket.Client{Conn: conn, Room: room}
room.Register(client)
go func() {
defer func() {
room.Unregister(client)
hub.CleanupRoom(roomID)
}()
for {
var msg map[string]string
err := client.Conn.ReadJSON(&msg)
if err != nil {
break
}
message := []byte(msg["text"])
room.Broadcast(message)
}
}()
}
}
+1 -1
View File
@@ -17,7 +17,7 @@ func NewDB(path string) (*DB, error) {
return nil, err
}
schema, err := os.ReadFile("../../migrations/schema.sql")
schema, err := os.ReadFile("migrations/schema.sql")
if err != nil {
return nil, err
}
+4 -4
View File
@@ -3,8 +3,8 @@ package websocket
import "github.com/gorilla/websocket"
type Client struct {
conn *websocket.Conn
room *Room
Conn *websocket.Conn
Room *Room
}
type Room struct {
@@ -25,12 +25,12 @@ func (r *Room) Register(client *Client) {
func (r *Room) Unregister(client *Client) {
delete(r.clients, client)
client.conn.Close()
client.Conn.Close()
}
func (r *Room) Broadcast(message []byte) {
for client := range r.clients {
err := client.conn.WriteMessage(websocket.TextMessage, message)
err := client.Conn.WriteMessage(websocket.TextMessage, message)
if err != nil {
r.Unregister(client)
}