From 22a12f1a02ce45b9cdd28937d52157ea9a2324ef Mon Sep 17 00:00:00 2001 From: Sam Smith <84774021+samcsmith@users.noreply.github.com> Date: Thu, 3 Aug 2023 13:27:31 +0100 Subject: [PATCH 1/9] Add function to generate random players --- simple-game-server-go/go.mod | 2 +- simple-game-server-go/go.sum | 2 ++ .../internal/game/allocated.go | 21 +++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/simple-game-server-go/go.mod b/simple-game-server-go/go.mod index c5e8fa0..0ef582e 100644 --- a/simple-game-server-go/go.mod +++ b/simple-game-server-go/go.mod @@ -3,7 +3,7 @@ module github.com/Unity-Technologies/multiplay-examples/simple-game-server-go go 1.20 require ( - github.com/Unity-Technologies/unity-gaming-services-go-sdk v0.3.1 + github.com/Unity-Technologies/unity-gaming-services-go-sdk v0.4.1 github.com/sirupsen/logrus v1.9.0 github.com/stretchr/testify v1.8.2 ) diff --git a/simple-game-server-go/go.sum b/simple-game-server-go/go.sum index 5a33355..3657449 100644 --- a/simple-game-server-go/go.sum +++ b/simple-game-server-go/go.sum @@ -2,6 +2,8 @@ github.com/FZambia/eagle v0.0.2 h1:35qHDuXSQevZ4w9A51k4wU7OE/tPHTEWXoywA93hvkY= github.com/FZambia/sentinel v1.1.0 h1:qrCBfxc8SvJihYNjBWgwUI93ZCvFe/PJIPTHKmlp8a8= github.com/Unity-Technologies/unity-gaming-services-go-sdk v0.3.1 h1:piV2hAtoc5ke3ywkIvUs82J+CphjWXoN3219isDmY00= github.com/Unity-Technologies/unity-gaming-services-go-sdk v0.3.1/go.mod h1:WgDwSafd4alCs+HdK0z+7htBVZIe+LUrLQgM738WDd0= +github.com/Unity-Technologies/unity-gaming-services-go-sdk v0.4.1 h1:oM4+Pi8ZA9qVoqclK/S1dDUQd9QZoKWrDLY7gJzIHAw= +github.com/Unity-Technologies/unity-gaming-services-go-sdk v0.4.1/go.mod h1:WgDwSafd4alCs+HdK0z+7htBVZIe+LUrLQgM738WDd0= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/centrifugal/centrifuge v0.21.1 h1:7saDm953rxzke4YfzoNekxKnpckmdTnz8EzbSribwos= github.com/centrifugal/centrifuge-go v0.8.4 h1:X23NuXmXTqdlp6PNrZLj1bWcPpehVq5u8LxuM2+NrIA= diff --git a/simple-game-server-go/internal/game/allocated.go b/simple-game-server-go/internal/game/allocated.go index 3180276..73a5d56 100644 --- a/simple-game-server-go/internal/game/allocated.go +++ b/simple-game-server-go/internal/game/allocated.go @@ -58,6 +58,8 @@ func (g *Game) launchGame(port int64) { return } + go simulatePlayers() + g.gameBind = gs for { @@ -76,6 +78,25 @@ func (g *Game) launchGame(port int64) { } } +func simulatePlayers() { + var startPlayers int = 30 + i := 0 + //Setup baseline of players + for i < startPlayers { + s.Server.PlayerJoined() + i++ + } + for { + var incrementOrDecrement = rand.Intn(1) + if incrementOrDecrement == 0 { + s.Server.PlayerLeft() + } else { + s.Server.PlayerJoined() + } + time.Sleep(rand.Intn(20) * time.Second) + } +} + // acceptClient accepts a new TCP connection and updates internal state. func (g *Game) acceptClient(server *net.TCPListener) (*net.TCPConn, error) { client, err := server.AcceptTCP() From 6689765f322f95ecd0266439553f0f9d2a26d3cf Mon Sep 17 00:00:00 2001 From: Sam Smith <84774021+samcsmith@users.noreply.github.com> Date: Fri, 4 Aug 2023 13:16:35 +0100 Subject: [PATCH 2/9] reworked --- .../internal/game/allocated.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/simple-game-server-go/internal/game/allocated.go b/simple-game-server-go/internal/game/allocated.go index 73a5d56..ef051f1 100644 --- a/simple-game-server-go/internal/game/allocated.go +++ b/simple-game-server-go/internal/game/allocated.go @@ -58,7 +58,7 @@ func (g *Game) launchGame(port int64) { return } - go simulatePlayers() + go g.simulatePlayers() g.gameBind = gs @@ -78,22 +78,23 @@ func (g *Game) launchGame(port int64) { } } -func simulatePlayers() { +func (g *Game) simulatePlayers() { var startPlayers int = 30 i := 0 //Setup baseline of players for i < startPlayers { - s.Server.PlayerJoined() + g.Server.PlayerJoined() i++ } for { - var incrementOrDecrement = rand.Intn(1) - if incrementOrDecrement == 0 { - s.Server.PlayerLeft() - } else { - s.Server.PlayerJoined() + if j, err := rand.Int(rand.Reader, big.NewInt(100)); err == nil { + if float32(j.Int64()) > 0 { + g.Server.PlayerLeft() + } else { + g.Server.PlayerJoined() + } } - time.Sleep(rand.Intn(20) * time.Second) + time.Sleep(time.Second * 20) } } From 53037273124aea8ceee203a3a8d85e75fab21989 Mon Sep 17 00:00:00 2001 From: Sam Smith <84774021+samcsmith@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:17:59 +0100 Subject: [PATCH 3/9] working simulated players --- .../internal/game/allocated.go | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/simple-game-server-go/internal/game/allocated.go b/simple-game-server-go/internal/game/allocated.go index ef051f1..3dd593b 100644 --- a/simple-game-server-go/internal/game/allocated.go +++ b/simple-game-server-go/internal/game/allocated.go @@ -78,22 +78,26 @@ func (g *Game) launchGame(port int64) { } } +const startPlayers = 30 + func (g *Game) simulatePlayers() { - var startPlayers int = 30 - i := 0 - //Setup baseline of players - for i < startPlayers { + + // Setup baseline of players + for i := 0; i < startPlayers; i++ { g.Server.PlayerJoined() - i++ } for { - if j, err := rand.Int(rand.Reader, big.NewInt(100)); err == nil { - if float32(j.Int64()) > 0 { - g.Server.PlayerLeft() - } else { - g.Server.PlayerJoined() - } + j, err := rand.Int(rand.Reader, big.NewInt(1)) + if err != nil { + return + } + + if float32(j.Int64()) == 0 { + g.Server.PlayerLeft() + } else { + g.Server.PlayerJoined() } + time.Sleep(time.Second * 20) } } From 416d6097829dd1be7ae5338893810b223553eebc Mon Sep 17 00:00:00 2001 From: Sam Smith <84774021+samcsmith@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:20:41 +0100 Subject: [PATCH 4/9] working simulated players --- simple-game-server-go/internal/game/allocated.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple-game-server-go/internal/game/allocated.go b/simple-game-server-go/internal/game/allocated.go index 3dd593b..4a3b35a 100644 --- a/simple-game-server-go/internal/game/allocated.go +++ b/simple-game-server-go/internal/game/allocated.go @@ -87,7 +87,7 @@ func (g *Game) simulatePlayers() { g.Server.PlayerJoined() } for { - j, err := rand.Int(rand.Reader, big.NewInt(1)) + j, err := rand.Int(rand.Reader, big.NewInt(2)) if err != nil { return } From 0d3cda4ff79cf56d74b6cd8415ff7b6834cfa0c2 Mon Sep 17 00:00:00 2001 From: Sam Smith <84774021+samcsmith@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:24:56 +0100 Subject: [PATCH 5/9] fix linting --- simple-game-server-go/internal/game/allocated.go | 1 - 1 file changed, 1 deletion(-) diff --git a/simple-game-server-go/internal/game/allocated.go b/simple-game-server-go/internal/game/allocated.go index 4a3b35a..ddf50ac 100644 --- a/simple-game-server-go/internal/game/allocated.go +++ b/simple-game-server-go/internal/game/allocated.go @@ -81,7 +81,6 @@ func (g *Game) launchGame(port int64) { const startPlayers = 30 func (g *Game) simulatePlayers() { - // Setup baseline of players for i := 0; i < startPlayers; i++ { g.Server.PlayerJoined() From b33ee6c8fe78e59525345a3a919dd9818bd66b5f Mon Sep 17 00:00:00 2001 From: Sam Smith <84774021+samcsmith@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:30:15 +0100 Subject: [PATCH 6/9] add logging entry for simulated players --- simple-game-server-go/internal/game/allocated.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/simple-game-server-go/internal/game/allocated.go b/simple-game-server-go/internal/game/allocated.go index ddf50ac..862f7b2 100644 --- a/simple-game-server-go/internal/game/allocated.go +++ b/simple-game-server-go/internal/game/allocated.go @@ -93,8 +93,14 @@ func (g *Game) simulatePlayers() { if float32(j.Int64()) == 0 { g.Server.PlayerLeft() + g.logger.WithFields(logrus.Fields{ + "current_players": currentPlayers, + }).Info("simulated client left") } else { g.Server.PlayerJoined() + g.logger.WithFields(logrus.Fields{ + "current_players": currentPlayers, + }).Info("simulated client joined") } time.Sleep(time.Second * 20) From 085dceb9361866872ec71ad3c4100aa1015c2ceb Mon Sep 17 00:00:00 2001 From: Sam Smith <84774021+samcsmith@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:32:43 +0100 Subject: [PATCH 7/9] add logging entry for simulated players --- simple-game-server-go/internal/game/allocated.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/simple-game-server-go/internal/game/allocated.go b/simple-game-server-go/internal/game/allocated.go index 862f7b2..35eeac3 100644 --- a/simple-game-server-go/internal/game/allocated.go +++ b/simple-game-server-go/internal/game/allocated.go @@ -86,18 +86,18 @@ func (g *Game) simulatePlayers() { g.Server.PlayerJoined() } for { - j, err := rand.Int(rand.Reader, big.NewInt(2)) + j, err := rand.Int(rand.Reader, big.NewInt(5)) if err != nil { return } if float32(j.Int64()) == 0 { - g.Server.PlayerLeft() + currentPlayers := g.Server.PlayerLeft() g.logger.WithFields(logrus.Fields{ "current_players": currentPlayers, }).Info("simulated client left") } else { - g.Server.PlayerJoined() + currentPlayers := g.Server.PlayerJoined() g.logger.WithFields(logrus.Fields{ "current_players": currentPlayers, }).Info("simulated client joined") From 03357903a3e3457054d0ee878001b78287345906 Mon Sep 17 00:00:00 2001 From: Sam Smith <84774021+samcsmith@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:39:56 +0100 Subject: [PATCH 8/9] add logging entry for simulated player --- simple-game-server-go/internal/game/allocated.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/simple-game-server-go/internal/game/allocated.go b/simple-game-server-go/internal/game/allocated.go index 35eeac3..b2e28ca 100644 --- a/simple-game-server-go/internal/game/allocated.go +++ b/simple-game-server-go/internal/game/allocated.go @@ -86,21 +86,15 @@ func (g *Game) simulatePlayers() { g.Server.PlayerJoined() } for { - j, err := rand.Int(rand.Reader, big.NewInt(5)) + j, err := rand.Int(rand.Reader, big.NewInt(30)) if err != nil { return } if float32(j.Int64()) == 0 { - currentPlayers := g.Server.PlayerLeft() - g.logger.WithFields(logrus.Fields{ - "current_players": currentPlayers, - }).Info("simulated client left") + g.Server.PlayerLeft() } else { - currentPlayers := g.Server.PlayerJoined() - g.logger.WithFields(logrus.Fields{ - "current_players": currentPlayers, - }).Info("simulated client joined") + g.Server.PlayerJoined() } time.Sleep(time.Second * 20) From 46619023b516753988500dea7f320ca3eedac825 Mon Sep 17 00:00:00 2001 From: Sam Smith <84774021+samcsmith@users.noreply.github.com> Date: Mon, 7 Aug 2023 16:39:28 +0100 Subject: [PATCH 9/9] working as long as rollout is done correctly --- simple-game-server-go/internal/game/allocated.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/simple-game-server-go/internal/game/allocated.go b/simple-game-server-go/internal/game/allocated.go index b2e28ca..f26be83 100644 --- a/simple-game-server-go/internal/game/allocated.go +++ b/simple-game-server-go/internal/game/allocated.go @@ -14,7 +14,7 @@ import ( "github.com/sirupsen/logrus" ) -const defaultMaxPlayers = 4 +const defaultMaxPlayers = 64 // allocated starts a game after the server has been allocated. func (g *Game) allocated(allocationID string) { @@ -73,7 +73,6 @@ func (g *Game) launchGame(port int64) { continue } - go g.handleClient(client) } } @@ -86,18 +85,19 @@ func (g *Game) simulatePlayers() { g.Server.PlayerJoined() } for { - j, err := rand.Int(rand.Reader, big.NewInt(30)) + j, err := rand.Int(rand.Reader, big.NewInt(4)) if err != nil { + g.logger.Debug(err) + fmt.Println("j: ", j) return } - if float32(j.Int64()) == 0 { + if j.Int64() == 0 || j.Int64() == 1 { g.Server.PlayerLeft() } else { g.Server.PlayerJoined() } - - time.Sleep(time.Second * 20) + time.Sleep(20 * time.Second) } }