game/server/main.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
}