summaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2025-04-18 13:17:19 +0200
committerSanto Cariotti <santo@dcariotti.me>2025-04-18 13:17:19 +0200
commit040b6e169dbd78b0f79921e4590e49b8970f685f (patch)
tree9f051bc0e4b8d581d514a4b29f5061bbd0fe1534 /pkg
parentfafd0111465ded6bfec5c0d91d7dd9c19ddac50b (diff)
Use playname-n for peers instead of peer-1 and peer-2
Diffstat (limited to 'pkg')
-rw-r--r--pkg/p2p/network.go3
-rw-r--r--pkg/ui/views/game.go6
-rw-r--r--pkg/ui/views/game_api.go29
-rw-r--r--pkg/ui/views/game_keymap.go2
-rw-r--r--pkg/ui/views/game_util.go12
-rw-r--r--pkg/ui/views/play_api.go4
6 files changed, 36 insertions, 20 deletions
diff --git a/pkg/p2p/network.go b/pkg/p2p/network.go
index 7ff0746..fba8c80 100644
--- a/pkg/p2p/network.go
+++ b/pkg/p2p/network.go
@@ -22,6 +22,9 @@ type Message struct {
// A network ID is represented by a string
type NetworkID string
+// Default empty network' ID
+const EmptyNetworkID NetworkID = NetworkID("")
+
// This type represents the function that is called every time a new message
// arrives to the server.
type NetworkMessageReceiveFunc func(msg Message)
diff --git a/pkg/ui/views/game.go b/pkg/ui/views/game.go
index 8750789..4e8cc87 100644
--- a/pkg/ui/views/game.go
+++ b/pkg/ui/views/game.go
@@ -94,7 +94,7 @@ func (m GameModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
cmds = append(cmds, cmd, m.updateMovesListCmd())
case EndGameMsg:
if msg.abandoned {
- if m.network.Me() == "peer-1" {
+ if m.network.Me() == m.playerPeer(1) {
m.game.Outcome = string(chess.WhiteWon)
} else {
m.game.Outcome = string(chess.BlackWon)
@@ -173,12 +173,12 @@ func (m GameModel) View() string {
switch m.game.Outcome {
case string(chess.WhiteWon):
outcome = "White won"
- if m.network.Me() == "peer-1" {
+ if m.network.Me() == m.playerPeer(1) {
outcome += " (YOU)"
}
case string(chess.BlackWon):
outcome = "Black won"
- if m.network.Me() == "peer-2" {
+ if m.network.Me() == m.playerPeer(2) {
outcome += " (YOU)"
}
case string(chess.Draw):
diff --git a/pkg/ui/views/game_api.go b/pkg/ui/views/game_api.go
index 485df41..e2ef280 100644
--- a/pkg/ui/views/game_api.go
+++ b/pkg/ui/views/game_api.go
@@ -6,6 +6,7 @@ import (
"os"
"github.com/boozec/rahanna/internal/api/database"
+ "github.com/boozec/rahanna/pkg/p2p"
tea "github.com/charmbracelet/bubbletea"
"github.com/notnil/chess"
)
@@ -15,6 +16,21 @@ func (m GameModel) handleDatabaseGameMsg(msg database.Game) (GameModel, tea.Cmd)
var cmd tea.Cmd
+ // Establish peer connection
+ if m.network.Peer() == p2p.EmptyNetworkID {
+ if m.network.Me() == m.playerPeer(1) {
+ if m.game.IP2 != "" {
+ remote := m.game.IP2
+ go m.network.AddPeer(m.playerPeer(2), remote)
+ }
+ } else {
+ if m.game.IP1 != "" {
+ remote := m.game.IP1
+ go m.network.AddPeer(m.playerPeer(1), remote)
+ }
+ }
+ }
+
if m.game.Outcome != chess.NoOutcome.String() {
cmd = func() tea.Msg {
return EndGameMsg{}
@@ -46,19 +62,6 @@ func (m *GameModel) getGame() tea.Cmd {
return nil
}
- // Establish peer connection
- if m.network.Me() == "peer-1" {
- if game.IP2 != "" {
- remote := game.IP2
- go m.network.AddPeer("peer-2", remote)
- }
- } else {
- if game.IP1 != "" {
- remote := game.IP1
- go m.network.AddPeer("peer-1", remote)
- }
- }
-
return game
}
}
diff --git a/pkg/ui/views/game_keymap.go b/pkg/ui/views/game_keymap.go
index 6f363d7..00b062f 100644
--- a/pkg/ui/views/game_keymap.go
+++ b/pkg/ui/views/game_keymap.go
@@ -38,7 +38,7 @@ func (m GameModel) handleKeyMsg(msg tea.KeyMsg) (GameModel, tea.Cmd) {
// Abandon game only if it is not finished
if m.game.Outcome == "*" {
var outcome string
- if m.network.Me() == "peer-1" {
+ if m.network.Me() == m.playerPeer(1) {
outcome = string(chess.BlackWon)
} else {
outcome = string(chess.WhiteWon)
diff --git a/pkg/ui/views/game_util.go b/pkg/ui/views/game_util.go
index eb904c5..f5e4a5d 100644
--- a/pkg/ui/views/game_util.go
+++ b/pkg/ui/views/game_util.go
@@ -1,6 +1,9 @@
package views
import (
+ "fmt"
+
+ "github.com/boozec/rahanna/pkg/p2p"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
)
@@ -24,5 +27,12 @@ func (m GameModel) buildWindowContent(content string, formWidth int) string {
}
func (m GameModel) isMyTurn() bool {
- return m.turn%2 == 0 && m.network.Me() == "peer-1" || m.turn%2 == 1 && m.network.Me() == "peer-2"
+ return m.turn%2 == 0 && m.network.Me() == m.playerPeer(1) || m.turn%2 == 1 && m.network.Me() == m.playerPeer(2)
+}
+
+func (m GameModel) playerPeer(n int) p2p.NetworkID {
+ if m.game == nil {
+ return p2p.EmptyNetworkID
+ }
+ return p2p.NetworkID(fmt.Sprintf("%s-%d", m.game.Name, n))
}
diff --git a/pkg/ui/views/play_api.go b/pkg/ui/views/play_api.go
index d65dca9..6cc0c6e 100644
--- a/pkg/ui/views/play_api.go
+++ b/pkg/ui/views/play_api.go
@@ -45,7 +45,7 @@ func (m *PlayModel) handlePlayResponse(msg playResponse) (tea.Model, tea.Cmd) {
logger, _ := logger.GetLogger()
callbackCompleted := make(chan bool)
- m.network = multiplayer.NewGameNetwork("peer-1", fmt.Sprintf("%s:%d", msg.Ok.IP, msg.Ok.Port), func() error {
+ m.network = multiplayer.NewGameNetwork(fmt.Sprintf("%s-1", m.playName), fmt.Sprintf("%s:%d", msg.Ok.IP, msg.Ok.Port), func() error {
close(callbackCompleted)
return nil
}, logger)
@@ -68,7 +68,7 @@ func (m *PlayModel) handleGameResponse(msg database.Game) (tea.Model, tea.Cmd) {
localPort, _ := strconv.ParseInt(ip[1], 10, 32)
logger, _ := logger.GetLogger()
- network := multiplayer.NewGameNetwork("peer-2", fmt.Sprintf("%s:%d", localIP, localPort), p2p.DefaultHandshake, logger)
+ network := multiplayer.NewGameNetwork(fmt.Sprintf("%s-2", m.game.Name), fmt.Sprintf("%s:%d", localIP, localPort), p2p.DefaultHandshake, logger)
return m, SwitchModelCmd(NewGameModel(m.width, m.height+1, m.game.ID, network))
}