package websocket import ( "encoding/json" "git.smsvc.net/pomodoro/GoTomato/internal/broadcast" "git.smsvc.net/pomodoro/GoTomato/internal/pomodoro" "git.smsvc.net/pomodoro/GoTomato/pkg/models" "github.com/gorilla/websocket" "log" ) var unsetPomodoroConfig models.GoTomatoPomodoroConfig // used to check if client passed a config json // handleClientCommands listens for commands from WebSocket clients and dispatches to the timer. func handleClientCommands(ws *websocket.Conn) { for { var clientCommand models.ClientCommand var pomodoroConfig = models.GoTomatoPomodoroConfig{ Work: 25 * 60, ShortBreak: 5 * 60, LongBreak: 15 * 60, Sessions: 4, } _, message, err := ws.ReadMessage() if err != nil { log.Printf("Client disconnected: %v", err) delete(broadcast.Clients, ws) break } // Handle incoming commands err = json.Unmarshal(message, &clientCommand) if err != nil { log.Printf("Error unmarshalling command: %v", err) continue } // Process the command switch clientCommand.Command { case "start": if !pomodoro.IsPomodoroOngoing() { if clientCommand.Config != unsetPomodoroConfig { pomodoroConfig = clientCommand.Config } go pomodoro.RunPomodoro(broadcast.Clients, pomodoroConfig) // Start the timer with the list of clients } case "stop": if pomodoro.IsPomodoroOngoing() { pomodoro.ResetPomodoro(broadcast.Clients) // Reset Pomodoro } case "pause": if pomodoro.IsPomodoroOngoing() && !pomodoro.IsPomodoroPaused() { pomodoro.PausePomodoro() // Pause the timer } case "resume": if pomodoro.IsPomodoroOngoing() && pomodoro.IsPomodoroPaused() { pomodoro.ResumePomodoro() // Resume the timer } } } }