77 lines
2.3 KiB
Go
77 lines
2.3 KiB
Go
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
|
|
}
|