package main import ( "context" "database/sql" "github.com/heroiclabs/nakama-common/runtime" // Adjust these imports to match your project structure "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 MATCHES for ALL games //-------------------------------------------------------- // Build registry: game name → GameRules implementation registry := map[string]game.GameRules{ "tictactoe": &game.TicTacToeRules{}, "battleship": &game.BattleshipRules{}, } // Register a Generic Match Handler that can run ANY game from registry if err := initializer.RegisterMatch("generic", modules.NewGenericMatch(registry)); err != nil { logger.Error("Failed to register generic match: %v", err) return err } //-------------------------------------------------------- // 4. Register Leaderboards dynamically (optional) //-------------------------------------------------------- leaderboards := []string{ "tictactoe_classic", "tictactoe_ranked", "battleship_classic", "battleship_ranked", } for _, lb := range leaderboards { err := nk.LeaderboardCreate( ctx, lb, // leaderboard ID true, // authoritative "desc", // sort order "incr", // operator "", // reset schedule (none) 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 }