summaryrefslogtreecommitdiff
path: root/pkg/ui
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2025-04-18 12:46:00 +0200
committerSanto Cariotti <santo@dcariotti.me>2025-04-18 12:46:00 +0200
commitfafd0111465ded6bfec5c0d91d7dd9c19ddac50b (patch)
tree17908eae0e0d3292798b7d98777ff8fb22722cfe /pkg/ui
parent0f21452248783d627ec1a3b4e8a3f8f0d9a69a10 (diff)
Close connection on end game
Diffstat (limited to 'pkg/ui')
-rw-r--r--pkg/ui/multiplayer/multiplayer.go14
-rw-r--r--pkg/ui/views/game.go2
-rw-r--r--pkg/ui/views/game_keymap.go28
3 files changed, 33 insertions, 11 deletions
diff --git a/pkg/ui/multiplayer/multiplayer.go b/pkg/ui/multiplayer/multiplayer.go
index 0e390eb..ac3bc7a 100644
--- a/pkg/ui/multiplayer/multiplayer.go
+++ b/pkg/ui/multiplayer/multiplayer.go
@@ -3,6 +3,7 @@ package multiplayer
import (
"time"
+ "github.com/boozec/rahanna/internal/logger"
"github.com/boozec/rahanna/pkg/p2p"
"go.uber.org/zap"
)
@@ -48,3 +49,16 @@ func (n *GameNetwork) AddPeer(remoteID p2p.NetworkID, addr string) {
func (n *GameNetwork) AddReceiveFunction(f p2p.NetworkMessageReceiveFunc) {
n.server.OnReceiveFn = f
}
+
+func (n *GameNetwork) Close() error {
+ err := n.server.Close()
+ logger, _ := logger.GetLogger()
+
+ if err != nil {
+ logger.Sugar().Errorf("Can't close connection for network '%+v': %s", n, err.Error())
+ } else {
+ logger.Sugar().Infof("Connection closed for network '%+v'", n)
+ }
+
+ return err
+}
diff --git a/pkg/ui/views/game.go b/pkg/ui/views/game.go
index a97d068..8750789 100644
--- a/pkg/ui/views/game.go
+++ b/pkg/ui/views/game.go
@@ -102,6 +102,8 @@ func (m GameModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m, cmd = m.handleDatabaseGameMsg(*m.game)
cmds = append(cmds, cmd)
}
+
+ m.err = m.network.Close()
case error:
m.err = msg
}
diff --git a/pkg/ui/views/game_keymap.go b/pkg/ui/views/game_keymap.go
index 5c65a57..6f363d7 100644
--- a/pkg/ui/views/game_keymap.go
+++ b/pkg/ui/views/game_keymap.go
@@ -35,15 +35,18 @@ var defaultGameKeyMap = gameKeyMap{
func (m GameModel) handleKeyMsg(msg tea.KeyMsg) (GameModel, tea.Cmd) {
switch {
case key.Matches(msg, m.keys.Abandon):
- var outcome string
- if m.network.Me() == "peer-1" {
- outcome = string(chess.BlackWon)
- } else {
- outcome = string(chess.WhiteWon)
- }
+ // Abandon game only if it is not finished
+ if m.game.Outcome == "*" {
+ var outcome string
+ if m.network.Me() == "peer-1" {
+ outcome = string(chess.BlackWon)
+ } else {
+ outcome = string(chess.WhiteWon)
+ }
- m.network.Send([]byte("🏳️"))
- return m, m.endGame(outcome)
+ m.network.Send([]byte("🏳️"))
+ return m, m.endGame(outcome)
+ }
case key.Matches(msg, m.keys.Quit):
return m, SwitchModelCmd(NewPlayModel(m.width, m.height))
}
@@ -52,9 +55,12 @@ func (m GameModel) handleKeyMsg(msg tea.KeyMsg) (GameModel, tea.Cmd) {
}
func (m GameModel) renderNavigationButtons() string {
- abandonKey := fmt.Sprintf("%s %s",
- altCodeStyle.Render(m.keys.Abandon.Help().Key),
- m.keys.Abandon.Help().Desc)
+ var abandonKey string
+ if m.game.Outcome == "*" {
+ abandonKey = fmt.Sprintf("%s %s",
+ altCodeStyle.Render(m.keys.Abandon.Help().Key),
+ m.keys.Abandon.Help().Desc)
+ }
quitKey := fmt.Sprintf("%s %s",
altCodeStyle.Render(m.keys.Quit.Help().Key),