Files
gomoku/server/state/create.go
T
tiennm99 1b9eec5f7d refactor: rename Go module and copy core pkgs into server/pkg
- Module: github.com/ratel-online/server → github.com/tiennm99/gomoku/server
- Copied core/{log,util/async,util/json,util/strings,model,network,protocol,consts}
  into server/pkg/* (temporary shims until phase-05 replaces protocol/network)
- Rewrote all ratel-online import paths across server/**/*.go
- Trimmed main.go: single -p flag, WS-only on :1999, no TCP/bot/static
- Trimmed network/wss.go: endpoint /gomoku, no static file serving
- Updated Makefile: removed TCP/bot references, port 1999
2026-04-11 12:04:03 +07:00

62 lines
1.6 KiB
Go

package state
import (
"bytes"
"errors"
"fmt"
"github.com/tiennm99/gomoku/server/consts"
"github.com/tiennm99/gomoku/server/database"
)
// create handles room creation. Prompts for game type, creates the room, and
// automatically joins the creator. Transitions to waiting state.
type create struct{}
func (*create) Next(player *database.Player) (consts.StateID, error) {
gameType, err := askForGameType(player)
if err != nil {
return 0, err
}
room := database.CreateRoom(player.ID, gameType)
err = player.WriteString(fmt.Sprintf("Create room successful, id : %d\n", room.ID))
if err != nil {
return 0, player.WriteError(err)
}
err = database.JoinRoom(room.ID, player.ID)
if err != nil {
return 0, player.WriteError(err)
}
return consts.StateWaiting, nil
}
func (*create) Exit(_ *database.Player) consts.StateID {
return consts.StateHome
}
// askForGameType displays the list of available game types and waits for the player's selection.
func askForGameType(player *database.Player) (gameType int, err error) {
buf := bytes.Buffer{}
buf.WriteString("Please select game type\n")
for _, id := range consts.GameTypesIds {
buf.WriteString(fmt.Sprintf("%d.%s\n", id, consts.GameTypes[id]))
}
err = player.WriteString(buf.String())
if err != nil {
return 0, player.WriteError(err)
}
gameType, err = player.AskForInt()
if err != nil {
if errors.Is(err, consts.ErrorsExist) {
return 0, err
}
_ = player.WriteError(consts.ErrorsGameTypeInvalid)
return 0, consts.ErrorsGameTypeInvalid
}
if _, ok := consts.GameTypes[gameType]; !ok {
_ = player.WriteError(consts.ErrorsGameTypeInvalid)
return 0, consts.ErrorsGameTypeInvalid
}
return
}