90 lines
1.6 KiB
Go
90 lines
1.6 KiB
Go
package room
|
|
|
|
import (
|
|
"q5"
|
|
"cs"
|
|
"github.com/golang/protobuf/proto"
|
|
)
|
|
|
|
type team struct {
|
|
room *room
|
|
teamId int32
|
|
teamUuid string
|
|
members q5.ListHead
|
|
}
|
|
|
|
func (this *team) init(room *room, teamId int32, teamUuid string) {
|
|
this.room = room
|
|
this.teamId = teamId
|
|
this.members.Init(nil)
|
|
this.teamUuid = teamUuid
|
|
}
|
|
|
|
func (this *team) unInit() {
|
|
this.members.ForEach(
|
|
func (data interface{}) bool {
|
|
m := data.(*member)
|
|
m.unInit()
|
|
return true
|
|
})
|
|
this.room = nil
|
|
}
|
|
|
|
func (this *team) fillMFTeam(pb *cs.MFTeam) {
|
|
pb.TeamId = proto.Int32(this.teamId)
|
|
pb.TeamUuid = proto.String(this.teamUuid)
|
|
q5.NewSlice(&pb.Members, 0, 4)
|
|
this.members.ForEach(
|
|
func (data interface{}) bool {
|
|
m := data.(*member)
|
|
pbM := &cs.MFMember{}
|
|
m.fillMFMember(pbM)
|
|
q5.AppendSlice(&pb.Members, pbM)
|
|
return true
|
|
})
|
|
}
|
|
|
|
func (this *team) addMember(m *member) {
|
|
m.team = this
|
|
this.members.AddTail(&m.teamEntry)
|
|
}
|
|
|
|
func (this *team) getMemberNum() int32 {
|
|
return this.members.Size()
|
|
}
|
|
|
|
func (this *team) hasAlreadMember() bool {
|
|
ok := false
|
|
this.members.ForEach(
|
|
func (data interface{}) bool {
|
|
m := data.(*member)
|
|
if m.state == MEMBER_READY_STATE {
|
|
ok = true
|
|
return false
|
|
}
|
|
return true
|
|
})
|
|
return ok
|
|
}
|
|
|
|
func (this *team) getOwnerCandidate() *member {
|
|
var ownerCandidate *member
|
|
this.members.ForEach(
|
|
func (data interface{}) bool {
|
|
m := data.(*member)
|
|
if m.hum.IsOnline() {
|
|
ownerCandidate = m
|
|
return false
|
|
}
|
|
return true
|
|
})
|
|
return ownerCandidate
|
|
}
|
|
|
|
func newTeam(room *room, teamId int32, teamUuid string, leader *member) *team {
|
|
t := new(team)
|
|
t.init(room, teamId, teamUuid)
|
|
t.addMember(leader)
|
|
return t
|
|
}
|