go_dreamfactory/modules/entertainment/gamemgr.go
2023-10-25 16:07:22 +08:00

66 lines
1.5 KiB
Go

package entertainment
import (
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/core/cbase"
"go_dreamfactory/pb"
"sync"
"google.golang.org/protobuf/proto"
)
/*
游戏管理组件
*/
type gameMgrComp struct {
cbase.ModuleCompBase
module *Entertainment
lock sync.RWMutex
rooms map[string]*Room
}
func (this *gameMgrComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
err = this.ModuleCompBase.Init(service, module, comp, options)
this.module = module.(*Entertainment)
this.rooms = make(map[string]*Room)
return
}
func (this *gameMgrComp) CreateRoom(p1 *pb.PlayerData, p2 *pb.PlayerData) (room *Room) {
room = new(Room) //初始化房间
room = room.InitRoom(this.module, p1, p2)
this.lock.Lock()
this.rooms[room.Id] = room
this.lock.Unlock()
return room
}
func (this *gameMgrComp) CloseRoom(id string) {
this.lock.Lock()
delete(this.rooms, id)
this.lock.Unlock()
}
func (this *gameMgrComp) RoomDistribute(rid string, session comm.IUserSession, stype string, req proto.Message) (errdata *pb.ErrorData) {
var (
room *Room
ok bool
)
this.lock.RLock()
room, ok = this.rooms[rid]
this.lock.RUnlock()
if ok {
errdata = room.ReceiveMessage(session, stype, req)
} else {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.String(),
Message: fmt.Sprintf("on found room:%s", rid),
}
}
return
}