package manager import ( "fmt" "git.noahlan.cn/northlan/ngs" "git.noahlan.cn/northlan/ntools-go/logger" ) type ( // Room 游戏房间 // 游戏类型:游戏房间 = 1:n -> 适用于同一个游戏多局游戏同时直播的情况 // 游戏房间:客户端 = 1:n -> 适用于同一个游戏多个客户端实例(状态同步、帧同步?) // 客户端:直播间 = 1:n -> 适用于同一个游戏客户端,覆盖多个游戏直播间的情况(如果允许) Room struct { *RoomMeta *RoomData *ngs.Group // 分组 } ) func newRoom(id int64, gameType string, isDefault bool) *Room { return &Room{ RoomMeta: &RoomMeta{ ID: id, GameType: gameType, IsDefault: isDefault, }, RoomData: newRoomData(), Group: ngs.NewGroup(fmt.Sprintf("Room-%s-%d", gameType, id)), } } // Broadcast 广播消息到该房间内所有客户端session func (r *Room) Broadcast(route string, v interface{}) { err := r.Group.Broadcast(route, v) if err != nil { logger.SLog.Errorf("推送消息到 房间[%d:%s] 失败, err:%v", r.ID, r.GameType, err) } } // Multicast 根据filter条件推送消息 func (r *Room) Multicast(route string, v interface{}, filter ngs.SessionFilter) { err := r.Group.Multicast(route, v, filter) if err != nil { logger.SLog.Errorf("推送消息到 房间[%d:%s] 失败, err:%v", r.ID, r.GameType, err) } }