From 884650c68d683eb1af228fe4300b723593cf9d34 Mon Sep 17 00:00:00 2001 From: Ryan Hamamura <58859899+ryanhamamura@users.noreply.github.com> Date: Thu, 19 Feb 2026 11:14:35 -1000 Subject: [PATCH] feat: integrate via v0.18.1 context suspension and key throttling Upgrade via to v0.18.1 and configure context suspension timeouts (5min suspend, 30min TTL) for clean reconnection behavior. Throttle snake direction key inputs to 100ms to prevent wasted SSE round-trips when keys are held down. --- go.mod | 2 +- go.sum | 4 ++-- main.go | 28 +++++++++++++++------------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index 4baa6ed..a0b1c64 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 github.com/pressly/goose/v3 v3.26.0 - github.com/ryanhamamura/via v0.15.1 + github.com/ryanhamamura/via v0.18.1 golang.org/x/crypto v0.47.0 modernc.org/sqlite v1.44.0 ) diff --git a/go.sum b/go.sum index c019c7b..2f99a57 100644 --- a/go.sum +++ b/go.sum @@ -78,8 +78,8 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qq github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= -github.com/ryanhamamura/via v0.15.1 h1:iprRL5bWX/F7iVUf1FOkmVFECfV5871RcmdvQenyytg= -github.com/ryanhamamura/via v0.15.1/go.mod h1:rpJewNVG6tgginZN7Be3qqRuol70+v1sFCKD4UjHsQo= +github.com/ryanhamamura/via v0.18.1 h1:YsqLP9LL6GbmHsUKnLpTIfSM/oIgw2ufG5XUYZU5jHI= +github.com/ryanhamamura/via v0.18.1/go.mod h1:rpJewNVG6tgginZN7Be3qqRuol70+v1sFCKD4UjHsQo= github.com/sethvargo/go-retry v0.3.0 h1:EEt31A35QhrcRZtrYFDTBg91cqZVnFL2navjDrah2SE= github.com/sethvargo/go-retry v0.3.0/go.mod h1:mNX17F0C/HguQMyMyJxcnU471gOZGxCLyYaFyAZraas= github.com/starfederation/datastar-go v1.0.3 h1:DnzgsJ6tDHDM6y5Nxsk0AGW/m8SyKch2vQg3P1xGTcU= diff --git a/main.go b/main.go index a74a5f2..d20937a 100644 --- a/main.go +++ b/main.go @@ -71,11 +71,13 @@ func main() { v := via.New() v.Config(via.Options{ - LogLevel: via.LogLevelDebug, - DocumentTitle: "Game Lobby", - ServerAddress: ":" + port(), - SessionManager: sessionManager, - Plugins: []via.Plugin{DaisyUIPlugin}, + LogLevel: via.LogLevelDebug, + DocumentTitle: "Game Lobby", + ServerAddress: ":" + port(), + SessionManager: sessionManager, + Plugins: []via.Plugin{DaisyUIPlugin}, + ContextSuspendAfter: 5 * time.Minute, + ContextTTL: 30 * time.Minute, }) subFS, _ := fs.Sub(assets, "assets") @@ -768,14 +770,14 @@ func main() { wrapperAttrs := []h.H{ h.Class("snake-wrapper flex flex-col items-center gap-4 p-4"), via.OnKeyDownMap( - via.KeyBind("w", handleDir, via.WithSignalInt(dirSignal, int(snake.DirUp))), - via.KeyBind("a", handleDir, via.WithSignalInt(dirSignal, int(snake.DirLeft))), - via.KeyBind("s", handleDir, via.WithSignalInt(dirSignal, int(snake.DirDown))), - via.KeyBind("d", handleDir, via.WithSignalInt(dirSignal, int(snake.DirRight))), - via.KeyBind("ArrowUp", handleDir, via.WithSignalInt(dirSignal, int(snake.DirUp)), via.WithPreventDefault()), - via.KeyBind("ArrowLeft", handleDir, via.WithSignalInt(dirSignal, int(snake.DirLeft)), via.WithPreventDefault()), - via.KeyBind("ArrowDown", handleDir, via.WithSignalInt(dirSignal, int(snake.DirDown)), via.WithPreventDefault()), - via.KeyBind("ArrowRight", handleDir, via.WithSignalInt(dirSignal, int(snake.DirRight)), via.WithPreventDefault()), + via.KeyBind("w", handleDir, via.WithSignalInt(dirSignal, int(snake.DirUp)), via.WithThrottle(100*time.Millisecond)), + via.KeyBind("a", handleDir, via.WithSignalInt(dirSignal, int(snake.DirLeft)), via.WithThrottle(100*time.Millisecond)), + via.KeyBind("s", handleDir, via.WithSignalInt(dirSignal, int(snake.DirDown)), via.WithThrottle(100*time.Millisecond)), + via.KeyBind("d", handleDir, via.WithSignalInt(dirSignal, int(snake.DirRight)), via.WithThrottle(100*time.Millisecond)), + via.KeyBind("ArrowUp", handleDir, via.WithSignalInt(dirSignal, int(snake.DirUp)), via.WithPreventDefault(), via.WithThrottle(100*time.Millisecond)), + via.KeyBind("ArrowLeft", handleDir, via.WithSignalInt(dirSignal, int(snake.DirLeft)), via.WithPreventDefault(), via.WithThrottle(100*time.Millisecond)), + via.KeyBind("ArrowDown", handleDir, via.WithSignalInt(dirSignal, int(snake.DirDown)), via.WithPreventDefault(), via.WithThrottle(100*time.Millisecond)), + via.KeyBind("ArrowRight", handleDir, via.WithSignalInt(dirSignal, int(snake.DirRight)), via.WithPreventDefault(), via.WithThrottle(100*time.Millisecond)), ), }