summaryrefslogtreecommitdiff
path: root/pkg/ui/multiplayer/multiplayer.go
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2025-04-24 13:53:54 +0200
committerSanto Cariotti <santo@dcariotti.me>2025-04-24 13:53:54 +0200
commitb35829071ab0d0f3479021eac151b90e49a2fca5 (patch)
tree0e2af88ed2732e2211ffbf5689488e010174783a /pkg/ui/multiplayer/multiplayer.go
parent4ae96a216eb50ccec7712fa9ed0d4dc8d9950f68 (diff)
Play co-op 2 vs 2
Diffstat (limited to 'pkg/ui/multiplayer/multiplayer.go')
-rw-r--r--pkg/ui/multiplayer/multiplayer.go34
1 files changed, 24 insertions, 10 deletions
diff --git a/pkg/ui/multiplayer/multiplayer.go b/pkg/ui/multiplayer/multiplayer.go
index 1b9365b..9694859 100644
--- a/pkg/ui/multiplayer/multiplayer.go
+++ b/pkg/ui/multiplayer/multiplayer.go
@@ -1,6 +1,7 @@
package multiplayer
import (
+ "slices"
"time"
"github.com/boozec/rahanna/internal/logger"
@@ -12,20 +13,21 @@ type MoveType string
const (
AbandonGameMessage MoveType = "abandon"
- RestoreGameMessage MoveType = "restore"
- RestoreAckGameMessage MoveType = "restore-ack"
MoveGameMessage MoveType = "new-move"
+ RestoreAckGameMessage MoveType = "restore-ack"
+ RestoreGameMessage MoveType = "restore"
)
type GameMove struct {
- Type []byte `json:"type"`
- Payload []byte `json:"payload"`
+ Source p2p.NetworkID `json:"source"`
+ Type []byte `json:"type"`
+ Payload []byte `json:"payload"`
}
type GameNetwork struct {
server *p2p.TCPNetwork
me p2p.NetworkID
- peer p2p.NetworkID
+ peers []p2p.NetworkID
}
// Wrapper to a `TCPNetwork`
@@ -44,20 +46,32 @@ func NewGameNetwork(localID string, address string, onHandshake p2p.NetworkHands
}
}
-func (n *GameNetwork) Peer() p2p.NetworkID {
- return n.peer
+func (n *GameNetwork) Peers() []p2p.NetworkID {
+ return n.peers
}
func (n *GameNetwork) Me() p2p.NetworkID {
return n.me
}
-func (n *GameNetwork) Send(messageType []byte, payload []byte) error {
- return n.server.Send(n.peer, messageType, payload)
+// Send a message to all peers
+func (n *GameNetwork) SendAll(messageType []byte, payload []byte) error {
+ for _, peer := range n.peers {
+ n.server.Send(peer, messageType, payload)
+ }
+
+ return nil
+}
+
+// Send a message to only one peer
+func (n *GameNetwork) Send(peer p2p.NetworkID, messageType []byte, payload []byte) error {
+ return n.server.Send(peer, messageType, payload)
}
func (n *GameNetwork) AddPeer(remoteID p2p.NetworkID, addr string) {
- n.peer = remoteID
+ if exists := slices.Contains(n.peers, remoteID); !exists {
+ n.peers = append(n.peers, remoteID)
+ }
n.server.AddPeer(remoteID, addr)
}