From 09b475dd61782bbca1a9ba1290c632fd3baf90b4 Mon Sep 17 00:00:00 2001 From: Sebastian Mark Date: Sun, 20 Oct 2024 14:31:52 +0200 Subject: [PATCH 1/3] feat: create model for server config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - introduce GoTomatoServerConfig - create instance variable with the current config - update server to use configurable listen address and port 🤖 --- cmd/server/main.go | 13 +++++++++++-- pkg/models/config.go | 6 ++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 pkg/models/config.go diff --git a/cmd/server/main.go b/cmd/server/main.go index 6470e4d..3d1c9f8 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -1,16 +1,25 @@ package server import ( + "fmt" "git.smsvc.net/pomodoro/GoTomato/internal/websocket" + "git.smsvc.net/pomodoro/GoTomato/pkg/models" "log" "net/http" ) +var serverConfig = models.GoTomatoServerConfig{ + ListenAddress: "0.0.0.0", + ListenPort: 8080, +} + func Start() { + listen := fmt.Sprintf("%s:%d", serverConfig.ListenAddress, serverConfig.ListenPort) + http.HandleFunc("/ws", websocket.HandleConnections) - log.Println("Pomodoro WebSocket server started on :8080") - err := http.ListenAndServe(":8080", nil) + log.Printf("Pomodoro WebSocket server started on %s\n", listen) + err := http.ListenAndServe(listen, nil) if err != nil { log.Fatalf("Error starting server: %v", err) } diff --git a/pkg/models/config.go b/pkg/models/config.go new file mode 100644 index 0000000..59db277 --- /dev/null +++ b/pkg/models/config.go @@ -0,0 +1,6 @@ +package models + +type GoTomatoServerConfig struct { + ListenAddress string `json:"listenAddress"` + ListenPort int `json:"listenPort"` +} From 85923b4469390bfe465faa520d87a9b0e0e8b4bd Mon Sep 17 00:00:00 2001 From: Sebastian Mark Date: Sun, 20 Oct 2024 14:42:50 +0200 Subject: [PATCH 2/3] feat: create model for pomodoro settings - introduce GoTomatoTimerConfig - create instance variable with current config - update code to use the new variable --- internal/pomodoro/pomodoro.go | 22 +++++++++++----------- internal/pomodoro/timer.go | 4 ++-- pkg/models/config.go | 7 +++++++ 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/internal/pomodoro/pomodoro.go b/internal/pomodoro/pomodoro.go index c8a3b03..5599af7 100644 --- a/internal/pomodoro/pomodoro.go +++ b/internal/pomodoro/pomodoro.go @@ -7,12 +7,12 @@ import ( "sync" ) -const ( - workDuration = 15 * 60 - shortBreakDuration = 5 * 60 - longBreakDuration = 10 * 60 - sessions = 4 -) +var PomodoroConfig = models.GoTomatoTimerConfig{ + Work: 15 * 60, + ShortBreak: 5 * 60, + LongBreak: 10 * 60, + Sessions: 4, +} var pomodoroRunning bool var pomodoroPaused bool @@ -30,16 +30,16 @@ func RunPomodoroTimer(clients map[*websocket.Conn]*models.Client) { pomodoroPaused = false mu.Unlock() - for session := 1; session <= sessions; session++ { - if !startTimer(clients, workDuration, "Work", session) { + for session := 1; session <= PomodoroConfig.Sessions; session++ { + if !startTimer(clients, PomodoroConfig.Work, "Work", session) { break } - if session == sessions { - if !startTimer(clients, longBreakDuration, "LongBreak", session) { + if session == PomodoroConfig.Sessions { + if !startTimer(clients, PomodoroConfig.LongBreak, "LongBreak", session) { break } } else { - if !startTimer(clients, shortBreakDuration, "ShortBreak", session) { + if !startTimer(clients, PomodoroConfig.ShortBreak, "ShortBreak", session) { break } } diff --git a/internal/pomodoro/timer.go b/internal/pomodoro/timer.go index 96595b3..e4d95dd 100644 --- a/internal/pomodoro/timer.go +++ b/internal/pomodoro/timer.go @@ -23,7 +23,7 @@ func startTimer(clients map[*websocket.Conn]*models.Client, remainingSeconds int broadcast.BroadcastMessage(clients, models.BroadcastMessage{ Mode: mode, Session: session, - MaxSession: sessions, + MaxSession: PomodoroConfig.Sessions, TimeLeft: remainingSeconds, }) time.Sleep(time.Second) @@ -36,7 +36,7 @@ func startTimer(clients map[*websocket.Conn]*models.Client, remainingSeconds int broadcast.BroadcastMessage(clients, models.BroadcastMessage{ Mode: mode, Session: session, - MaxSession: sessions, + MaxSession: PomodoroConfig.Sessions, TimeLeft: 0, }) diff --git a/pkg/models/config.go b/pkg/models/config.go index 59db277..628e685 100644 --- a/pkg/models/config.go +++ b/pkg/models/config.go @@ -1,5 +1,12 @@ package models +type GoTomatoTimerConfig struct { + Work int `json:"work"` + ShortBreak int `json:"shortBreak"` + LongBreak int `json:"longBreak"` + Sessions int `json:"sessions"` +} + type GoTomatoServerConfig struct { ListenAddress string `json:"listenAddress"` ListenPort int `json:"listenPort"` From 0b2f83cd35bbc73fcedd5944277297c351a835db Mon Sep 17 00:00:00 2001 From: Sebastian Mark Date: Sun, 20 Oct 2024 14:55:02 +0200 Subject: [PATCH 3/3] feat: add CLI flags to app MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - implement command-line flags for listen address and port - add usage section to README 🤖 --- README.md | 4 ++++ cmd/server/main.go | 16 +++++++++++----- pkg/models/config.go | 4 ++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 2769187..0362d80 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ A pomodoro server written in Go `go install git.smsvc.net/pomodoro/GoTomato@latest` +## Usage + +See `GoTomato --help` for Parameters + ## Testing ``` diff --git a/cmd/server/main.go b/cmd/server/main.go index 3d1c9f8..2105b39 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -1,6 +1,7 @@ package server import ( + "flag" "fmt" "git.smsvc.net/pomodoro/GoTomato/internal/websocket" "git.smsvc.net/pomodoro/GoTomato/pkg/models" @@ -8,12 +9,17 @@ import ( "net/http" ) -var serverConfig = models.GoTomatoServerConfig{ - ListenAddress: "0.0.0.0", - ListenPort: 8080, -} - func Start() { + // Define CLI flags for ListenAddress and ListenPort + listenAddress := flag.String("listenAddress", "0.0.0.0", "IP address to listen on") + listenPort := flag.Int("listenPort", 8080, "Port to listen on") + flag.Parse() + + serverConfig := models.GoTomatoServerConfig{ + ListenAddress: *listenAddress, + ListenPort: *listenPort, + } + listen := fmt.Sprintf("%s:%d", serverConfig.ListenAddress, serverConfig.ListenPort) http.HandleFunc("/ws", websocket.HandleConnections) diff --git a/pkg/models/config.go b/pkg/models/config.go index 628e685..33a79d4 100644 --- a/pkg/models/config.go +++ b/pkg/models/config.go @@ -8,6 +8,6 @@ type GoTomatoTimerConfig struct { } type GoTomatoServerConfig struct { - ListenAddress string `json:"listenAddress"` - ListenPort int `json:"listenPort"` + ListenAddress string `json:"listenAddress, default:"0.0.0.0"` + ListenPort int `json:"listenPort, default:8080"` }