diff --git a/game/builtin/room_manager.go b/game/builtin/room_manager.go new file mode 100644 index 0000000..592314f --- /dev/null +++ b/game/builtin/room_manager.go @@ -0,0 +1,34 @@ +package builtin + +import ( + "minotaur/game" + "minotaur/utils/synchronization" + "sync/atomic" +) + +func NewRoomManager[PlayerID comparable, Room game.Room[PlayerID, game.Player[PlayerID]]]() *RoomManager[PlayerID, Room] { + return &RoomManager[PlayerID, Room]{ + rooms: synchronization.NewMap[int64, Room](), + } +} + +// RoomManager 房间管理器 +type RoomManager[PlayerID comparable, Room game.Room[PlayerID, game.Player[PlayerID]]] struct { + guid atomic.Int64 + rooms *synchronization.Map[int64, Room] +} + +// GenGuid 生成一个新的房间guid +func (slf *RoomManager[PlayerID, Room]) GenGuid() int64 { + return slf.guid.Add(1) +} + +// AddRoom 添加房间到房间管理器中 +func (slf *RoomManager[PlayerID, Room]) AddRoom(room Room) { + slf.rooms.Set(room.GetGuid(), room) +} + +// CloseRoom 关闭特定guid的房间 +func (slf *RoomManager[PlayerID, Room]) CloseRoom(guid int64) { + slf.rooms.Delete(guid) +}