65 lines
972 B
Go
65 lines
972 B
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"sync"
|
||
|
|
)
|
||
|
|
|
||
|
|
type player struct {
|
||
|
|
// 玩家id
|
||
|
|
Id string `gorm:"column:Id;primary_key"`
|
||
|
|
|
||
|
|
// 玩家名称
|
||
|
|
Name string `gorm:"column:Name"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func (this *player) resetName(name string) {
|
||
|
|
this.Name = name
|
||
|
|
}
|
||
|
|
|
||
|
|
func (this *player) tableName() string {
|
||
|
|
return "player"
|
||
|
|
}
|
||
|
|
|
||
|
|
func newPlayer(id, name string) *player {
|
||
|
|
return &player{
|
||
|
|
Id: id,
|
||
|
|
Name: name,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
type playerMgr struct {
|
||
|
|
playerMap map[string]*player
|
||
|
|
|
||
|
|
mutex sync.Mutex
|
||
|
|
}
|
||
|
|
|
||
|
|
func (this *playerMgr) insert(obj *player) {
|
||
|
|
this.mutex.Lock()
|
||
|
|
defer this.mutex.Unlock()
|
||
|
|
|
||
|
|
this.playerMap[obj.Id] = obj
|
||
|
|
}
|
||
|
|
|
||
|
|
func (this *playerMgr) delete(obj *player) {
|
||
|
|
this.mutex.Lock()
|
||
|
|
defer this.mutex.Unlock()
|
||
|
|
|
||
|
|
delete(this.playerMap, obj.Id)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (this *playerMgr) randomSelect() *player {
|
||
|
|
this.mutex.Lock()
|
||
|
|
defer this.mutex.Unlock()
|
||
|
|
|
||
|
|
for _, obj := range this.playerMap {
|
||
|
|
return obj
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func newPlayerMgr() *playerMgr {
|
||
|
|
return &playerMgr{
|
||
|
|
playerMap: make(map[string]*player),
|
||
|
|
}
|
||
|
|
}
|