create initial frontend.
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user