aboutsummaryrefslogtreecommitdiffhomepage
path: root/backend/game
diff options
context:
space:
mode:
Diffstat (limited to 'backend/game')
-rw-r--r--backend/game/hub.go50
1 files changed, 36 insertions, 14 deletions
diff --git a/backend/game/hub.go b/backend/game/hub.go
index 08833ed..e6981e8 100644
--- a/backend/game/hub.go
+++ b/backend/game/hub.go
@@ -2,6 +2,7 @@ package game
import (
"context"
+ "errors"
"log"
"time"
@@ -81,26 +82,14 @@ func (hub *gameHub) run() {
}
}
if entriedPlayerCount == 2 {
- for player := range hub.players {
- player.s2cMessages <- &playerMessageS2CPrepare{
- Type: playerMessageTypeS2CPrepare,
- Data: playerMessageS2CPreparePayload{
- Problem: api.Problem{
- ProblemId: 1,
- Title: "the answer",
- Description: "print 42",
- },
- },
- }
- }
err := hub.q.UpdateGameState(hub.ctx, db.UpdateGameStateParams{
GameID: int32(hub.game.gameID),
- State: string(gameStatePrepare),
+ State: string(gameStateWaitingStart),
})
if err != nil {
log.Fatalf("failed to set game state: %v", err)
}
- hub.game.state = gameStatePrepare
+ hub.game.state = gameStateWaitingStart
}
case *playerMessageC2SReady:
log.Printf("ready: %v", message.message)
@@ -214,6 +203,31 @@ func (hub *gameHub) run() {
}
}
+func (hub *gameHub) startGame() error {
+ for player := range hub.players {
+ player.s2cMessages <- &playerMessageS2CPrepare{
+ Type: playerMessageTypeS2CPrepare,
+ Data: playerMessageS2CPreparePayload{
+ Problem: api.Problem{
+ ProblemId: 1,
+ Title: "the answer",
+ Description: "print 42",
+ },
+ },
+ }
+ }
+
+ err := hub.q.UpdateGameState(hub.ctx, db.UpdateGameStateParams{
+ GameID: int32(hub.game.gameID),
+ State: string(gameStatePrepare),
+ })
+ if err != nil {
+ return err
+ }
+ hub.game.state = gameStatePrepare
+ return nil
+}
+
func (hub *gameHub) close() {
for client := range hub.players {
hub.closePlayerClient(client)
@@ -302,3 +316,11 @@ func (hubs *GameHubs) Run() {
func (hubs *GameHubs) SockHandler() *sockHandler {
return newSockHandler(hubs)
}
+
+func (hubs *GameHubs) StartGame(gameID int) error {
+ hub := hubs.getHub(gameID)
+ if hub == nil {
+ return errors.New("no such game")
+ }
+ return hub.startGame()
+}