You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
3.7 KiB
Go

package live_logic
import (
"dcg/game/manager"
pbCommon "dcg/game/pb/common"
pbMq "dcg/game/pb/mq"
"dcg/game/svc"
"errors"
"git.noahlan.cn/northlan/ntools-go/logger"
)
var LiveManager *Manager
type (
Manager struct {
// gameLogics 游戏逻辑处理器 游戏类型相关
gameLogics map[string]LiveLogic
}
)
func InitLiveManager(svcCtx *svc.ServiceContext) {
LiveManager = &Manager{
gameLogics: make(map[string]LiveLogic),
}
// gameLogic
commonLogic := NewCommonLiveGameLogic(svcCtx)
opts := make([]LogicOption, 0)
// plain logic
opts = append(opts, WithGiftHandler(commonLogic.GiftHandler()))
opts = append(opts, WithGameType(""))
LiveManager.registerLogic(NewLiveGameLogic(opts...))
// zhg logic
opts = opts[:1]
zhgLogic := NewZhgLiveGameLogic(svcCtx)
opts = append(opts, WithGiftHandler(commonLogic.GiftHandler()), commonLogic.WithCmdHandler())
opts = append(opts,
zhgLogic.WithGameType(),
zhgLogic.WithCmdHandlers(),
zhgLogic.WithCmdParserLogic(commonLogic.CmdParserPatterns()),
)
LiveManager.registerLogic(NewLiveGameLogic(opts...))
opts = opts[:1]
zhgzdLogic := NewZhgzdLiveGameLogic(svcCtx)
opts = append(opts, WithGiftHandler(commonLogic.GiftHandler()), commonLogic.WithCmdHandler())
opts = append(opts,
zhgzdLogic.WithGameType(),
zhgzdLogic.WithCmdHandlers(),
zhgzdLogic.WithCmdParserLogic(commonLogic.CmdParserPatterns()),
zhgzdLogic.WithGiftHandler(),
)
LiveManager.registerLogic(NewLiveGameLogic(opts...))
//LiveManager.registerLogic(NewZhghzLiveGameLogic().liveLogic)
opts = opts[:1]
zhgww2Logic := NewWW2LiveGameLogic(svcCtx)
opts = append(opts, WithGiftHandler(commonLogic.GiftHandler()))
opts = append(opts,
zhgww2Logic.WithGameType(),
zhgww2Logic.WithCmdHandlers(),
zhgww2Logic.WithCmdParserLogic(commonLogic.CmdParserPatterns()),
zhgww2Logic.WithGiftHandler(),
)
LiveManager.registerLogic(NewLiveGameLogic(opts...))
opts = opts[:1]
zhgmang := NewZhgmangLiveGameLogic(svcCtx)
opts = append(opts, WithGiftHandler(commonLogic.GiftHandler()))
opts = append(opts,
zhgmang.WithGameType(),
zhgmang.WithPreDanmakuHandler(),
zhgmang.WithCmdHandlers(),
zhgmang.WithCmdParserLogic(commonLogic.CmdParserPatterns()),
zhgmang.WithGiftHandler(),
)
LiveManager.registerLogic(NewLiveGameLogic(opts...))
}
func (m *Manager) registerLogic(h LiveLogic) {
m.gameLogics[h.GameType()] = h
}
func (m *Manager) logicByLiveRoom(liveRoom *LiveRoom) (LiveLogic, error) {
room, err := manager.GameManager.RoomByLiveRoom(liveRoom.RoomId, liveRoom.Platform)
if err != nil {
return nil, errors.New("弹幕对应直播间未加入游戏房间")
}
if l, ok := m.gameLogics[room.GameType]; ok {
return l, nil
}
return nil, errors.New("未找到当前直播间支持的游戏逻辑")
}
func (m *Manager) HandleDanmaku(user *pbCommon.PbUser, dm *pbMq.MqDanmaku) {
liveRoom := &LiveRoom{
RoomId: dm.LiveRoomId,
Platform: dm.Platform,
}
l, err := m.logicByLiveRoom(liveRoom)
if err != nil {
logger.SLog.Errorf("获取游戏逻辑失败, err:%+v", err)
return
}
l.HandleDanmaku(liveRoom, user, dm)
}
func (m *Manager) HandleGift(user *pbCommon.PbUser, gift *pbMq.MqGift) {
liveRoom := &LiveRoom{
RoomId: gift.LiveRoomId,
Platform: gift.Platform,
}
l, err := m.logicByLiveRoom(liveRoom)
if err != nil {
logger.SLog.Errorf("获取游戏逻辑失败, err:%+v", err)
return
}
l.HandleGift(liveRoom, user, gift)
}
func (m *Manager) HandleNobility(user *pbCommon.PbUser, msg *pbMq.MqNobilityBuy) {
liveRoom := &LiveRoom{
RoomId: msg.LiveRoomId,
Platform: msg.Platform,
}
l, err := m.logicByLiveRoom(liveRoom)
if err != nil {
logger.SLog.Errorf("获取游戏逻辑失败, err:%+v", err)
return
}
l.HandleNobility(liveRoom, user, msg)
}