package main import ( "context" "database/sql" "math/rand" "os" "strings" "time" "wuziqi-server/config" "wuziqi-server/handlers" "github.com/heroiclabs/nakama-common/runtime" ) func InitModule(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, initializer runtime.Initializer) error { logger.Info("Nakama Go Module Loaded - Refactored Version") // 随机数种子 rand.Seed(time.Now().UnixNano()) // 如果存在,从环境变量初始化后端 URL envURL := os.Getenv("MINESWEEPER_BACKEND_URL") if envURL != "" { newURL := strings.TrimSuffix(envURL, "/") config.SetBackendBaseURL(newURL) logger.Info("Setting BackendBaseURL from environment: %s", newURL) } // 注册比赛处理器 if err := initializer.RegisterMatch("animal_minesweeper", func(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule) (runtime.Match, error) { logger.Debug("Creating new MatchHandler instance") return &handlers.MatchHandler{}, nil }); err != nil { logger.Error("Unable to register match: %v", err) return err } // 注册匹配器匹配钩子 if err := initializer.RegisterMatchmakerMatched(func(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, entries []runtime.MatchmakerEntry) (string, error) { logger.Info("Matchmaker matched! Creating authoritative match for %d players", len(entries)) matchId, err := nk.MatchCreate(ctx, "animal_minesweeper", nil) if err != nil { logger.Error("Failed to create match: %v", err) return "", err } logger.Info("Created authoritative match: %s", matchId) return matchId, nil }); err != nil { logger.Error("Unable to register matchmaker matched hook: %v", err) return err } logger.Info("Match registration completed successfully") // 注册 RPC if err := initializer.RegisterRpc("list_matches", handlers.RpcListMatches); err != nil { logger.Error("Unable to register rpc: %v", err) return err } if err := initializer.RegisterRpc("find_my_match", handlers.RpcFindMyMatch); err != nil { logger.Error("Unable to register rpc: %v", err) return err } if err := initializer.RegisterRpc("get_online_count", handlers.RpcGetOnlineCount); err != nil { logger.Error("Unable to register rpc: %v", err) return err } return nil }