房间更改为默认线程不安全,并通过可选项可创建线程安全的房间
This commit is contained in:
parent
5488b3d455
commit
31cb4a2f66
|
@ -2,16 +2,16 @@ package builtin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/kercylan98/minotaur/game"
|
"github.com/kercylan98/minotaur/game"
|
||||||
|
"github.com/kercylan98/minotaur/utils/asynchronization"
|
||||||
"github.com/kercylan98/minotaur/utils/hash"
|
"github.com/kercylan98/minotaur/utils/hash"
|
||||||
"github.com/kercylan98/minotaur/utils/log"
|
"github.com/kercylan98/minotaur/utils/log"
|
||||||
"github.com/kercylan98/minotaur/utils/synchronization"
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewRoom[PlayerID comparable, Player game.Player[PlayerID]](guid int64, options ...RoomOption[PlayerID, Player]) *Room[PlayerID, Player] {
|
func NewRoom[PlayerID comparable, Player game.Player[PlayerID]](guid int64, options ...RoomOption[PlayerID, Player]) *Room[PlayerID, Player] {
|
||||||
room := &Room[PlayerID, Player]{
|
room := &Room[PlayerID, Player]{
|
||||||
guid: guid,
|
guid: guid,
|
||||||
players: synchronization.NewMap[PlayerID, Player](),
|
players: asynchronization.NewMap[PlayerID, Player](),
|
||||||
}
|
}
|
||||||
for _, option := range options {
|
for _, option := range options {
|
||||||
option(room)
|
option(room)
|
||||||
|
@ -24,7 +24,7 @@ type Room[PlayerID comparable, Player game.Player[PlayerID]] struct {
|
||||||
owner PlayerID
|
owner PlayerID
|
||||||
noMaster bool
|
noMaster bool
|
||||||
playerLimit int
|
playerLimit int
|
||||||
players *synchronization.Map[PlayerID, Player]
|
players hash.Map[PlayerID, Player]
|
||||||
kickCheckHandle func(id, target PlayerID) error
|
kickCheckHandle func(id, target PlayerID) error
|
||||||
|
|
||||||
playerJoinRoomEventHandles []game.PlayerJoinRoomEventHandle[PlayerID, Player]
|
playerJoinRoomEventHandles []game.PlayerJoinRoomEventHandle[PlayerID, Player]
|
||||||
|
@ -45,7 +45,7 @@ func (slf *Room[PlayerID, Player]) GetPlayer(id PlayerID) Player {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *Room[PlayerID, Player]) GetPlayers() hash.MapReadonly[PlayerID, Player] {
|
func (slf *Room[PlayerID, Player]) GetPlayers() hash.MapReadonly[PlayerID, Player] {
|
||||||
return slf.players
|
return slf.players.(hash.MapReadonly[PlayerID, Player])
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *Room[PlayerID, Player]) GetPlayerCount() int {
|
func (slf *Room[PlayerID, Player]) GetPlayerCount() int {
|
||||||
|
|
|
@ -1,10 +1,20 @@
|
||||||
package builtin
|
package builtin
|
||||||
|
|
||||||
import "github.com/kercylan98/minotaur/game"
|
import (
|
||||||
|
"github.com/kercylan98/minotaur/game"
|
||||||
|
"github.com/kercylan98/minotaur/utils/synchronization"
|
||||||
|
)
|
||||||
|
|
||||||
// RoomOption 房间构建可选项
|
// RoomOption 房间构建可选项
|
||||||
type RoomOption[PlayerID comparable, Player game.Player[PlayerID]] func(room *Room[PlayerID, Player])
|
type RoomOption[PlayerID comparable, Player game.Player[PlayerID]] func(room *Room[PlayerID, Player])
|
||||||
|
|
||||||
|
// WithRoomSync 通过线程安全的方式创建房间
|
||||||
|
func WithRoomSync[PlayerID comparable, Player game.Player[PlayerID]]() RoomOption[PlayerID, Player] {
|
||||||
|
return func(room *Room[PlayerID, Player]) {
|
||||||
|
room.players = synchronization.NewMap[PlayerID, Player]()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// WithRoomPlayerLimit 限制房间的玩家数量上限
|
// WithRoomPlayerLimit 限制房间的玩家数量上限
|
||||||
func WithRoomPlayerLimit[PlayerID comparable, Player game.Player[PlayerID]](playerLimit int) RoomOption[PlayerID, Player] {
|
func WithRoomPlayerLimit[PlayerID comparable, Player game.Player[PlayerID]](playerLimit int) RoomOption[PlayerID, Player] {
|
||||||
return func(room *Room[PlayerID, Player]) {
|
return func(room *Room[PlayerID, Player]) {
|
||||||
|
|
Loading…
Reference in New Issue