|
|
|
package manager
|
|
|
|
|
|
|
|
import (
|
|
|
|
"dcg/game/svc"
|
|
|
|
"errors"
|
|
|
|
"fmt"
|
|
|
|
"git.noahlan.cn/northlan/ngs/session"
|
|
|
|
)
|
|
|
|
|
|
|
|
var GameManager *gameManager
|
|
|
|
|
|
|
|
type (
|
|
|
|
gameManager struct {
|
|
|
|
svcCtx *svc.ServiceContext // svcCtx
|
|
|
|
|
|
|
|
*RoomManager // 房间管理器
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
func Init(svcCtx *svc.ServiceContext) {
|
|
|
|
GameManager = newGameManager(svcCtx)
|
|
|
|
}
|
|
|
|
|
|
|
|
func newGameManager(svcCtx *svc.ServiceContext) *gameManager {
|
|
|
|
gameCfg := svcCtx.Config.Game.DefaultRooms
|
|
|
|
roomMetas := make([]RoomMeta, 0, len(gameCfg))
|
|
|
|
for _, s := range gameCfg {
|
|
|
|
roomMetas = append(roomMetas, RoomMeta{
|
|
|
|
ID: s.ID,
|
|
|
|
GameType: s.GameType,
|
|
|
|
IsDefault: true,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
return &gameManager{
|
|
|
|
svcCtx: svcCtx,
|
|
|
|
RoomManager: newRoomManager(WithDefaultRoom(roomMetas)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *gameManager) RoomByLiveRoom(liveRoomId int64, platform string) (*Room, error) {
|
|
|
|
var resp *Room
|
|
|
|
m.PeekAllSession(func(room *Room, s *session.Session) bool {
|
|
|
|
data, err := GetSessionData(s)
|
|
|
|
if err != nil {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
for _, liveRoom := range data.LiveRooms {
|
|
|
|
if liveRoom.ID == liveRoomId && liveRoom.Platform == platform {
|
|
|
|
resp = room
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
})
|
|
|
|
if resp == nil {
|
|
|
|
return nil, errors.New(fmt.Sprintf("未找到直播间 [%d] 对应游戏房间", liveRoomId))
|
|
|
|
}
|
|
|
|
return resp, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *gameManager) BattleIdByLiveRoom(liveRoomId int64, platform string) int64 {
|
|
|
|
room, err := m.RoomByLiveRoom(liveRoomId, platform)
|
|
|
|
if err != nil {
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
return room.BattleId
|
|
|
|
}
|