房间管理器简单实现

This commit is contained in:
kercylan98 2023-05-05 18:16:50 +08:00
parent 2038117c3b
commit 5e66a2df38
1 changed files with 34 additions and 0 deletions

View File

@ -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)
}