package catchbugs import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/core/cbase" "go_dreamfactory/pb" "sync" ) type roomsComp struct { cbase.ModuleCompBase module *CatchBugs lock sync.RWMutex rooms map[string]*Room } func (this *roomsComp) 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.(*CatchBugs) this.rooms = make(map[string]*Room) return } func (this *roomsComp) queryRoom(rid string) (room *Room, err error) { var ( ok bool ) this.lock.RLock() room, ok = this.rooms[rid] this.lock.RUnlock() if !ok { err = fmt.Errorf("no found room:%s", rid) return } return } func (this *roomsComp) newRoom(data *pb.DBCatchBugsRoom, session []comm.IUserSession) (room *Room, err error) { room = &Room{ module: this.module, data: data, sessions: session, round: 1, } this.lock.Lock() this.rooms[data.Rid] = room this.lock.Unlock() return } func (this *roomsComp) removeRoom(rid string) { var ( ok bool room *Room ) this.lock.Lock() room, ok = this.rooms[rid] delete(this.rooms, rid) this.lock.Unlock() if ok { go this.module.gameInvite.GameInviteEnd(4, room.data.Red.Info.Uid) } }