Files
tic-tac-toe/plugins/main.go

93 lines
2.4 KiB
Go

package main
import (
"context"
"database/sql"
"github.com/heroiclabs/nakama-common/runtime"
// Project modules
"localrepo/plugins/modules"
"localrepo/plugins/games"
)
func InitModule(
ctx context.Context,
logger runtime.Logger,
db *sql.DB,
nk runtime.NakamaModule,
initializer runtime.Initializer,
) error {
//--------------------------------------------------------
// 1. Register RPCs
//--------------------------------------------------------
if err := initializer.RegisterRpc("hello_world", HelloWorld); err != nil {
logger.Error("Failed to register RPC hello_world: %v", err)
return err
}
if err := initializer.RegisterRpc("leave_matchmaking", modules.RpcLeaveMatchmaking); err != nil {
logger.Error("Failed to register RPC leave_matchmaking: %v", err)
return err
}
//--------------------------------------------------------
// 2. Register Matchmaker Handler
//--------------------------------------------------------
if err := initializer.RegisterMatchmakerMatched(modules.MatchmakerMatched); err != nil {
logger.Error("Failed to register MatchmakerMatched: %v", err)
return err
}
//--------------------------------------------------------
// 3. Register ALL game rules for GenericMatch
//--------------------------------------------------------
registry := map[string]games.GameRules{
"tictactoe": &games.TicTacToeRules{},
"battleship": &games.BattleshipRules{},
}
if err := initializer.RegisterMatch(
"generic",
modules.NewGenericMatch(registry),
); err != nil {
logger.Error("Failed to register generic match: %v", err)
return err
}
//--------------------------------------------------------
// 4. Create Leaderboards
//--------------------------------------------------------
leaderboards := []string{
"tictactoe_classic",
"tictactoe_ranked",
"battleship_classic",
"battleship_ranked",
}
for _, lb := range leaderboards {
err := nk.LeaderboardCreate(
ctx,
lb,
true, // authoritative
"desc", // sort order
"incr", // operator
"", // reset schedule
map[string]interface{}{}, // metadata
)
if err != nil && err.Error() != "Leaderboard ID already exists" {
logger.Error("Failed to create leaderboard %s: %v", lb, err)
return err
}
logger.Info("Leaderboard ready: %s", lb)
}
logger.Info("Go module loaded successfully!")
return nil
}