diff --git a/internal/websocket/client_commands.go b/internal/websocket/client_commands.go index 53464dd..4ea7e7d 100644 --- a/internal/websocket/client_commands.go +++ b/internal/websocket/client_commands.go @@ -3,7 +3,6 @@ package websocket import ( "encoding/json" "github.com/charmbracelet/log" - "github.com/gorilla/websocket" "git.smsvc.net/pomodoro/GoTomato/internal/pomodoro" "git.smsvc.net/pomodoro/GoTomato/internal/shared" @@ -11,7 +10,8 @@ import ( ) // Listens for commands from a client and handles them -func handleClientCommands(ws *websocket.Conn) { +func handleClientCommands(c models.Client) { + ws := c.Conn for { var clientCommand models.ClientCommand diff --git a/internal/websocket/handle_connection.go b/internal/websocket/handle_connection.go index 5e97df2..37160d8 100644 --- a/internal/websocket/handle_connection.go +++ b/internal/websocket/handle_connection.go @@ -31,12 +31,13 @@ func HandleConnection(w http.ResponseWriter, r *http.Request) { log.Info("Client connected", "host", ws.NetConn().RemoteAddr(), "clients", len(Clients)+1) // Register the new client - mu.Lock() - Clients[ws] = &models.Client{ - Conn: ws, // Store the WebSocket connection + client := models.Client{ + Conn: ws, } + mu.Lock() + Clients[ws] = &client mu.Unlock() // Listen for commands from the connected client - handleClientCommands(ws) + handleClientCommands(client) } diff --git a/pkg/models/client.go b/pkg/models/client.go index 7a6ae21..f9eb116 100644 --- a/pkg/models/client.go +++ b/pkg/models/client.go @@ -3,7 +3,6 @@ package models import ( "github.com/charmbracelet/log" "github.com/gorilla/websocket" - "sync" ) // Represents a command from the client (start/stop) @@ -15,16 +14,12 @@ type ClientCommand struct { // Represents a single client type Client struct { - Conn *websocket.Conn // Websocket connection of the client - Mutex sync.Mutex // Mutex used to lock + Conn *websocket.Conn } // Sends a message to the websocket. // Automatically locks and unlocks the client mutex, to ensure that only one goroutine can write at a time. func (c *Client) SendMessage(messageType int, data []byte) error { - c.Mutex.Lock() - defer c.Mutex.Unlock() - err := c.Conn.WriteMessage(messageType, data) if err != nil { log.Error("Error writing to WebSocket:", "msg", err)