66 lines
1.5 KiB
Go
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
|
|
}
|