package main import ( "context" "database/sql" "github.com/heroiclabs/nakama-common/runtime" ) // Example RPC func HelloWorld( ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, payload string, ) (string, error) { logger.Info("HelloWorld RPC called — payload: %s", payload) return `{"message": "Hello from Go RPC!"}`, nil } // Required module initializer func InitModule( ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, initializer runtime.Initializer, ) error { if err := initializer.RegisterRpc("hello_world", HelloWorld); err != nil { logger.Error("Failed to register RPC: %v", err) return err } if err := initializer.RegisterMatch("tictactoe", NewMatch); err != nil { logger.Error("Failed to register RPC: %v", err) return err } // Match making if err := initializer.RegisterRpc("leave_matchmaking", rpcLeaveMatchmaking); err != nil { logger.Error("RegisterRpc leave_matchmaking failed: %v", err) return err } if err := initializer.RegisterMatchmakerMatched(MatchmakerMatched); err != nil { logger.Error("RegisterMatchmakerMatched failed: %v", err) return err } err := nk.LeaderboardCreate( ctx, "tictactoe", // id true, // authoritative "desc", // sortOrder "incr", // operator "", // resetSchedule map[string]interface{}{}, // metadata ) if err != nil && err.Error() != "Leaderboard ID already exists" { return err } logger.Info("Leaderboard tictactoe ready") logger.Info("Go module loaded successfully!") return nil }