优化
This commit is contained in:
parent
650ad0f3d8
commit
2ea8e5a11f
@ -45,23 +45,24 @@ const (
|
||||
|
||||
// im server guild
|
||||
const (
|
||||
RandomGuildCount = 10
|
||||
MaxMembers = 10
|
||||
MaxPendingReqs = 10
|
||||
DefaultLogs = 20
|
||||
LogTypeApprove = 1 // 公会日志类型, 批准加入
|
||||
LogTypeLeave = 2
|
||||
LogTypeDismiss = 3
|
||||
LogTypePromote = 4
|
||||
LogTypeDemote = 5
|
||||
LogTypeDisband = 6
|
||||
GuildMemberLevelLeader = 1 // 成员等级, 会长
|
||||
GuildMemberLevelViceLeader = 2 // 成员等级, 副会长
|
||||
GuildMemberLevelElite = 3 // 成员等级, 精英
|
||||
GuildMemberLevelDefault = 3 // 成员等级, 普通成员
|
||||
JoinCondDefault = 0 // 加入条件 0 需要审批
|
||||
JoinCondFree = 1 // 加入条件 1 可直接加入
|
||||
JoinCondStar = 2 // 加入条件 2 满足星星条件
|
||||
RandomGuildCount = 10
|
||||
MaxMembers = 10
|
||||
MaxPendingReqs = 10
|
||||
DefaultLogs = 20
|
||||
LogTypeApprove = 1 // 公会日志类型, 批准加入
|
||||
LogTypeLeave = 2
|
||||
LogTypeDismiss = 3
|
||||
LogTypePromote = 4
|
||||
LogTypeDemote = 5
|
||||
LogTypeDisband = 6
|
||||
GuildMemberLevelLeader = 1 // 成员等级, 会长
|
||||
GuildMemberLevelViceLeader = 2 // 成员等级, 副会长
|
||||
GuildMemberLevelElite = 3 // 成员等级, 精英
|
||||
GuildMemberLevelDefault = 4 // 成员等级, 普通成员
|
||||
JoinCondDefault = 0 // 加入条件 0 需要审批
|
||||
JoinCondFree = 1 // 加入条件 1 可直接加入
|
||||
JoinCondStar = 2 // 加入条件 2 满足星星条件
|
||||
|
||||
PendingReqIsJoinGuildStatusDefault = 0 // 等待验证请求状态, 0 等待审核
|
||||
PendingReqIsJoinGuildStatusJoined = 1 // 等待验证请求状态, 1 已加入
|
||||
PendingReqIsJoinGuildStatusReject = 2 // 等待验证请求状态, 2 拒绝
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -23,6 +23,7 @@ type Guild struct {
|
||||
ChickenDinners int32 // 单局第一名数
|
||||
MaxMembers int32 // 公会最大成员数 default 30
|
||||
Members []*GuildMember
|
||||
PendingReqs map[string]int32 // pendingAccountId -> status 0,1,2,3 pending, accept, reject, leave
|
||||
}
|
||||
|
||||
// GuildLog 公会日志
|
||||
@ -35,7 +36,8 @@ type GuildLog struct {
|
||||
|
||||
// PendingReq 待审核请求
|
||||
type PendingReq struct {
|
||||
Users map[string]bool
|
||||
AccountId string
|
||||
Status int32 // 0 pending, 1 ok, 2 reject, 3 disband
|
||||
}
|
||||
|
||||
func (g *Guild) GetGuildId() int64 {
|
||||
@ -53,13 +55,12 @@ func (g *Guild) findMemberIndex(AccountId string) int {
|
||||
}
|
||||
|
||||
// GetMember 根据 AccountId 获取成员信息
|
||||
func (g *Guild) GetMember(accountId string) (*GuildMember, error) {
|
||||
func (g *Guild) GetMember(accountId string) *GuildMember {
|
||||
index := g.findMemberIndex(accountId)
|
||||
if index == -1 {
|
||||
return nil, fmt.Errorf("member[%s] not found in the guild[%d]", accountId, g.GuildId)
|
||||
return nil
|
||||
}
|
||||
|
||||
return g.Members[index], nil
|
||||
return g.Members[index]
|
||||
}
|
||||
|
||||
// IsMember 是否是公会成员
|
||||
@ -84,22 +85,17 @@ func (g *Guild) AddMember(member *GuildMember) {
|
||||
}
|
||||
|
||||
// RemoveMember 移除成员
|
||||
func (g *Guild) RemoveMember(accountId string) error {
|
||||
func (g *Guild) RemoveMember(accountId string) {
|
||||
if accountId == g.LeaderId {
|
||||
return fmt.Errorf("cannot remove leader")
|
||||
return
|
||||
}
|
||||
|
||||
index := g.findMemberIndex(accountId)
|
||||
if index == -1 {
|
||||
return fmt.Errorf("member not found")
|
||||
return
|
||||
}
|
||||
//g.Members = append(g.Members[:index], g.Members[index+1:]...)
|
||||
// 使用 copy 方法来删除切片中的元素,保证数据一致性
|
||||
copy(g.Members[index:], g.Members[index+1:])
|
||||
g.Members[len(g.Members)-1] = nil // 最后一个元素设置为 nil,帮助 GC
|
||||
g.Members[len(g.Members)-1] = nil
|
||||
g.Members = g.Members[:len(g.Members)-1]
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (g *Guild) SetNotice(notice *string) {
|
||||
@ -110,26 +106,26 @@ func (g *Guild) GetNotice() string {
|
||||
return g.Notice
|
||||
}
|
||||
|
||||
func (p *PendingReq) GetUsers() map[string]bool {
|
||||
return p.Users
|
||||
// AddPendingReq 添加等待审核成员
|
||||
func (g *Guild) AddPendingReq(p *PendingReq) {
|
||||
g.PendingReqs[p.AccountId] = p.Status
|
||||
}
|
||||
|
||||
func (p *PendingReq) AddUser(accountId string) {
|
||||
if _, exists := p.Users[accountId]; !exists {
|
||||
p.Users[accountId] = true
|
||||
return
|
||||
func (g *Guild) GetPendingReqStatus(accountId string) int32 {
|
||||
if pendingReqStatus, exists := g.PendingReqs[accountId]; exists {
|
||||
if exists {
|
||||
return pendingReqStatus
|
||||
}
|
||||
}
|
||||
p.Users[accountId] = true
|
||||
return -1
|
||||
}
|
||||
|
||||
func (p *PendingReq) RemoveUser(accountId string) {
|
||||
delete(p.Users, accountId)
|
||||
// RemovePendingReq 移除等待审核成员
|
||||
func (g *Guild) RemovePendingReq(accountId string) {
|
||||
delete(g.PendingReqs, accountId)
|
||||
}
|
||||
|
||||
func (p *PendingReq) IsInReq(accountId string) bool {
|
||||
user, exists := p.Users[accountId]
|
||||
if exists {
|
||||
return user == true
|
||||
}
|
||||
return false
|
||||
func (g *Guild) IsInReq(accountId string) bool {
|
||||
pendingStatus, exists := g.PendingReqs[accountId]
|
||||
return exists && pendingStatus == PendingReqIsJoinGuildStatusJoined
|
||||
}
|
||||
|
@ -55,8 +55,6 @@ func (gm *GuildMgr) loadGuildFromDBResult(err error, rows *f5.DataSet) {
|
||||
ChickenDinners: q5.ToInt32(*rows.GetByIndex(10)),
|
||||
MaxMembers: q5.ToInt32(*rows.GetByIndex(11)),
|
||||
}
|
||||
// init pendingReqs
|
||||
gm.pendingReqs[guildId] = &PendingReq{}
|
||||
}
|
||||
q5.UnSetBitFlag(&gm.loadedFlags, LoadGuildFlag)
|
||||
}
|
||||
@ -128,10 +126,16 @@ func (gm *GuildMgr) loadPendingReqsFromDBResult(err error, rows *f5.DataSet) {
|
||||
guildId = q5.ToInt64(*rows.GetByIndex(0))
|
||||
accountId = q5.ToString(*rows.GetByIndex(1))
|
||||
|
||||
pendingReq := &PendingReq{}
|
||||
pendingReq.Users = make(map[string]bool)
|
||||
pendingReq.AddUser(accountId)
|
||||
gm.pendingReqs[guildId] = pendingReq
|
||||
pendingReq := &PendingReq{
|
||||
AccountId: accountId,
|
||||
Status: PendingReqIsJoinGuildStatusDefault,
|
||||
}
|
||||
if guild, ok := gm.guilds[guildId]; ok {
|
||||
if guild.PendingReqs == nil {
|
||||
guild.PendingReqs = make(map[string]int32)
|
||||
}
|
||||
guild.AddPendingReq(pendingReq)
|
||||
}
|
||||
}
|
||||
q5.UnSetBitFlag(&gm.loadedFlags, LoadGuildReqFlag)
|
||||
}
|
||||
@ -220,7 +224,7 @@ func (gm *GuildMgr) createGuildDB(g *Guild) {
|
||||
}
|
||||
|
||||
// updateGuild 更新公会信息
|
||||
func (gm *GuildMgr) updateGuild(g *Guild, fields [][]string) {
|
||||
func (gm *GuildMgr) updateGuild(g *Guild, fields [][]string, cb func(error)) {
|
||||
where := [][]string{
|
||||
{"guild_id", q5.ToString(g.GuildId)},
|
||||
}
|
||||
@ -229,7 +233,9 @@ func (gm *GuildMgr) updateGuild(g *Guild, fields [][]string) {
|
||||
"t_guild",
|
||||
fields,
|
||||
where,
|
||||
func(error, int64, int64) {},
|
||||
func(err error, lastInsertId int64, rowsAffected int64) {
|
||||
cb(err)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@ -262,8 +268,8 @@ func (gm *GuildMgr) upsertPendingReqs(guildId int64, accountId string, isJoinGui
|
||||
})
|
||||
}
|
||||
|
||||
// updatePendingReqs 更新所有申请加入公会记录
|
||||
func (gm *GuildMgr) updateAllPendingReqs(guildId int64, isJoinGuild int) {
|
||||
// updateAllPendingReqs 更新所有申请加入公会记录
|
||||
func (gm *GuildMgr) updateAllPendingReqs(guildId int64, isJoinGuild int, cb func(error)) {
|
||||
fields := [][]string{
|
||||
{"is_join_guild", q5.ToString(isJoinGuild)},
|
||||
}
|
||||
@ -276,17 +282,13 @@ func (gm *GuildMgr) updateAllPendingReqs(guildId int64, isJoinGuild int) {
|
||||
fields,
|
||||
where,
|
||||
func(err error, lastInsertId int64, rowsAffected int64) {
|
||||
if err != nil {
|
||||
f5.GetSysLog().Info("error:%v\n", err)
|
||||
}
|
||||
f5.GetSysLog().Info("lastInsertId:%d\n", lastInsertId)
|
||||
f5.GetSysLog().Info("rowsAffected:%d\n", rowsAffected)
|
||||
cb(err)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// updatePendingReqs 更新申请加入公会记录
|
||||
func (gm *GuildMgr) updatePendingReqs(guildId int64, accountId string, isJoinGuild int) {
|
||||
func (gm *GuildMgr) updatePendingReqs(guildId int64, accountId string, isJoinGuild int, cb func(error)) {
|
||||
fields := [][]string{
|
||||
{"is_join_guild", q5.ToString(isJoinGuild)},
|
||||
}
|
||||
@ -300,17 +302,13 @@ func (gm *GuildMgr) updatePendingReqs(guildId int64, accountId string, isJoinGui
|
||||
fields,
|
||||
where,
|
||||
func(err error, lastInsertId int64, rowsAffected int64) {
|
||||
if err != nil {
|
||||
f5.GetSysLog().Info("error:%v\n", err)
|
||||
}
|
||||
f5.GetSysLog().Info("lastInsertId:%d\n", lastInsertId)
|
||||
f5.GetSysLog().Info("rowsAffected:%d\n", rowsAffected)
|
||||
cb(err)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// insertPendingReqs 添加公会成员
|
||||
func (gm *GuildMgr) upsertGuildMember(guildId int64, member *GuildMember) {
|
||||
func (gm *GuildMgr) upsertGuildMember(guildId int64, member *GuildMember, cb func(error)) {
|
||||
where := [][]string{
|
||||
{"guild_id", q5.ToString(guildId)},
|
||||
{"account_id", member.AccountId},
|
||||
@ -329,18 +327,14 @@ func (gm *GuildMgr) upsertGuildMember(guildId int64, member *GuildMember) {
|
||||
updateKv,
|
||||
insertKv,
|
||||
func(err error, lastInsertId int64, rowsAffected int64) {
|
||||
if err != nil {
|
||||
f5.GetSysLog().Info("error:%v\n", err)
|
||||
}
|
||||
f5.GetSysLog().Info("lastInsertId:%d\n", lastInsertId)
|
||||
f5.GetSysLog().Info("rowsAffected:%d\n", rowsAffected)
|
||||
cb(err)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) updateGuildMembers(g *Guild, fields [][]string) {
|
||||
func (gm *GuildMgr) updateGuildMembers(guildId int64, fields [][]string, cb func(error)) {
|
||||
where := [][]string{
|
||||
{"guild_id", q5.ToString(g.GuildId)},
|
||||
{"guild_id", q5.ToString(guildId)},
|
||||
}
|
||||
f5.GetJsStyleDb().Update(
|
||||
FRIEND_DB,
|
||||
@ -348,17 +342,13 @@ func (gm *GuildMgr) updateGuildMembers(g *Guild, fields [][]string) {
|
||||
fields,
|
||||
where,
|
||||
func(err error, lastInsertId int64, rowsAffected int64) {
|
||||
if err != nil {
|
||||
f5.GetSysLog().Info("error:%v\n", err)
|
||||
}
|
||||
f5.GetSysLog().Info("lastInsertId:%d\n", lastInsertId)
|
||||
f5.GetSysLog().Info("rowsAffected:%d\n", rowsAffected)
|
||||
cb(err)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// updateGuildMember 更新成员信息
|
||||
func (gm *GuildMgr) updateGuildMember(g *Guild, accountId string, fields [][]string) {
|
||||
func (gm *GuildMgr) updateGuildMember(g *Guild, accountId string, fields [][]string, cb func(error)) {
|
||||
where := [][]string{
|
||||
{"guild_id", q5.ToString(g.GuildId)},
|
||||
{"account_id", accountId},
|
||||
@ -370,11 +360,7 @@ func (gm *GuildMgr) updateGuildMember(g *Guild, accountId string, fields [][]str
|
||||
fields,
|
||||
where,
|
||||
func(err error, lastInsertId int64, rowsAffected int64) {
|
||||
if err != nil {
|
||||
f5.GetSysLog().Info("error:%v\n", err)
|
||||
}
|
||||
f5.GetSysLog().Info("lastInsertId:%d\n", lastInsertId)
|
||||
f5.GetSysLog().Info("rowsAffected:%d\n", rowsAffected)
|
||||
cb(err)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -18,17 +18,15 @@ const (
|
||||
type GuildMgr struct {
|
||||
cs.MsgHandlerImpl
|
||||
guilds map[int64]*Guild // 公会ID -> 公会列表
|
||||
pendingReqs map[int64]*PendingReq // 公会ID -> PendingReq
|
||||
guildLogs map[int64][]*GuildLog // 公会ID -> 公会日志
|
||||
guildLogs map[int64][]*GuildLog // 公会ID -> []公会日志列表
|
||||
loadedFlags int64
|
||||
guildIds []int64 // 公会ids
|
||||
}
|
||||
|
||||
func NewGuildMgr() *GuildMgr {
|
||||
return &GuildMgr{
|
||||
guilds: make(map[int64]*Guild),
|
||||
pendingReqs: make(map[int64]*PendingReq),
|
||||
guildLogs: make(map[int64][]*GuildLog),
|
||||
guilds: make(map[int64]*Guild),
|
||||
guildLogs: make(map[int64][]*GuildLog),
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,146 +56,212 @@ func (gm *GuildMgr) loadFromDB() {
|
||||
}
|
||||
|
||||
// CreateGuild 创建公会
|
||||
func (gm *GuildMgr) CreateGuild(name string, leaderId string) (int64, error) {
|
||||
_, err := gm.checkJoinGuild(leaderId)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
func (gm *GuildMgr) CreateGuild(name string, leaderId string,
|
||||
cb func(errCode int32, errMsg string, guildId int64)) {
|
||||
if !gm.checkJoinGuild(leaderId) {
|
||||
cb(1, "xxx", 0)
|
||||
return
|
||||
}
|
||||
|
||||
guildId := f5.GetApp().NewUuid()
|
||||
if _, exists := gm.guilds[guildId]; exists {
|
||||
return 0, fmt.Errorf("CreateGuild fail")
|
||||
if gm.existsGuild(guildId) {
|
||||
cb(1, "xxx", 0)
|
||||
return
|
||||
}
|
||||
|
||||
guild := &Guild{
|
||||
GuildId: guildId,
|
||||
Name: name,
|
||||
LeaderId: leaderId,
|
||||
MaxMembers: MaxMembers,
|
||||
fields := [][]string{
|
||||
{"guild_id", q5.ToString(guildId)},
|
||||
{"name", name},
|
||||
{"leader_account_id", leaderId},
|
||||
{"max_members", q5.ToString(MaxMembers)},
|
||||
}
|
||||
|
||||
newMember := &GuildMember{AccountId: leaderId, Level: GuildMemberLevelLeader}
|
||||
guild.Members = append(guild.Members, newMember)
|
||||
|
||||
gm.createGuildDB(guild)
|
||||
gm.upsertGuildMember(guildId, newMember)
|
||||
gm.AddGuild(guildId, guild)
|
||||
|
||||
return guildId, nil
|
||||
f5.GetJsStyleDb().Insert(
|
||||
FRIEND_DB,
|
||||
"t_guild",
|
||||
fields,
|
||||
func(err error, id int64, affectedRows int64) {
|
||||
if err != nil {
|
||||
cb(1, "xxx", 0)
|
||||
return
|
||||
}
|
||||
newMember := &GuildMember{AccountId: leaderId, Level: GuildMemberLevelLeader}
|
||||
gm.upsertGuildMember(guildId, newMember,
|
||||
func(err error) {
|
||||
if err != nil {
|
||||
cb(1, "xxx", 0)
|
||||
return
|
||||
}
|
||||
guild := &Guild{
|
||||
AutoId: id,
|
||||
GuildId: guildId,
|
||||
Name: name,
|
||||
LeaderId: leaderId,
|
||||
MaxMembers: MaxMembers,
|
||||
}
|
||||
guild.Members = append(guild.Members, newMember)
|
||||
gm.AddGuild(guildId, guild)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// ApplyToGuild 申请加入公会
|
||||
func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string) error {
|
||||
func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string, cb func(errCode int32, errMsg string)) {
|
||||
guild, err := gm.GetGuild(guildId)
|
||||
if err != nil {
|
||||
return err
|
||||
cb(1, "xxx")
|
||||
}
|
||||
|
||||
// 是否加入其他公会
|
||||
_, err = gm.checkJoinGuild(applicantAccountId)
|
||||
if err != nil {
|
||||
return err
|
||||
if !gm.checkJoinGuild(applicantAccountId) {
|
||||
cb(1, "xxx")
|
||||
}
|
||||
|
||||
err = guild.IsFull()
|
||||
if err != nil {
|
||||
return err
|
||||
cb(1, "xxx")
|
||||
}
|
||||
|
||||
// 可直接加入
|
||||
if guild.JoinCond == JoinCondFree {
|
||||
gm.JoinGuild(guild, applicantAccountId)
|
||||
return nil
|
||||
cb(0, "")
|
||||
}
|
||||
|
||||
if guild.JoinCond == JoinCondStar {
|
||||
var userStar int32 = 200
|
||||
if userStar >= guild.JoinCondValue {
|
||||
gm.JoinGuild(guild, applicantAccountId)
|
||||
return nil
|
||||
cb(0, "")
|
||||
}
|
||||
}
|
||||
|
||||
// IF exists, then replace it fields `isJoinGuild` is 0
|
||||
gm.upsertPendingReqs(guildId, applicantAccountId, PendingReqIsJoinGuildStatusDefault)
|
||||
pendReq, err := gm.GetPendingReq(guildId)
|
||||
if err != nil {
|
||||
pendReq = &PendingReq{}
|
||||
where := [][]string{
|
||||
{"guild_id", q5.ToString(guildId)},
|
||||
{"account_id", applicantAccountId},
|
||||
}
|
||||
pendReq.AddUser(applicantAccountId)
|
||||
insertKv := [][]string{
|
||||
{"guild_id", q5.ToString(guildId)},
|
||||
{"account_id", applicantAccountId},
|
||||
{"is_join_guild", q5.ToString(PendingReqIsJoinGuildStatusDefault)},
|
||||
}
|
||||
updateKv := [][]string{
|
||||
{"is_join_guild", q5.ToString(PendingReqIsJoinGuildStatusDefault)},
|
||||
}
|
||||
f5.GetJsStyleDb().Upsert(
|
||||
FRIEND_DB,
|
||||
"t_guild_pending_request",
|
||||
where,
|
||||
updateKv,
|
||||
insertKv,
|
||||
func(err error, lastInsertId int64, rowsAffected int64) {
|
||||
if err != nil {
|
||||
cb(0, "")
|
||||
return
|
||||
}
|
||||
if rowsAffected <= 0 {
|
||||
return
|
||||
}
|
||||
|
||||
return nil
|
||||
pendingReq := &PendingReq{
|
||||
applicantAccountId,
|
||||
PendingReqIsJoinGuildStatusDefault,
|
||||
}
|
||||
guild.AddPendingReq(pendingReq)
|
||||
cb(0, "")
|
||||
})
|
||||
}
|
||||
|
||||
// Approve 同意申请者加入公会
|
||||
func (gm *GuildMgr) Approve(guildId int64, operatorAccountId, accountId string) error {
|
||||
guild, err := gm.GetGuild(guildId)
|
||||
if err != nil {
|
||||
return err
|
||||
func (gm *GuildMgr) Approve(operatorAccountId, accountId string, cb func(errCode int32, errMsg string)) {
|
||||
guild := gm.GetGuildByAccountId(operatorAccountId)
|
||||
if guild == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
// 通常默认为审核加入
|
||||
if guild.JoinCond != JoinCondDefault {
|
||||
return fmt.Errorf("join cond error")
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
operatorMember, err := guild.GetMember(operatorAccountId)
|
||||
if err != nil {
|
||||
return err
|
||||
operatorMember := guild.GetMember(operatorAccountId)
|
||||
if operatorMember == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
// 公会干部及以上仅可操作
|
||||
err = gm.checkOperatorPerm(operatorMember, GuildMemberLevelViceLeader)
|
||||
err := gm.checkOperatorPerm(operatorMember, GuildMemberLevelViceLeader)
|
||||
if err != nil {
|
||||
return err
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
// 是否加入其他公会
|
||||
_, err = gm.checkJoinGuild(accountId)
|
||||
if err != nil {
|
||||
return err
|
||||
if !gm.checkJoinGuild(accountId) {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
err = guild.IsFull()
|
||||
if err != nil {
|
||||
return err
|
||||
cb(1, "XXX")
|
||||
}
|
||||
guildId := guild.GuildId
|
||||
|
||||
// 是否在申请队列中
|
||||
pendingReq, err := gm.GetPendingReq(guildId)
|
||||
if err == nil {
|
||||
return err
|
||||
}
|
||||
|
||||
inReq := pendingReq.IsInReq(accountId)
|
||||
if !inReq {
|
||||
return fmt.Errorf("no pending applications for this guild")
|
||||
pendingReqStatus := guild.GetPendingReqStatus(accountId)
|
||||
if pendingReqStatus < 0 {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
newMember := &GuildMember{AccountId: accountId, Level: GuildMemberLevelDefault}
|
||||
guild.AddMember(newMember)
|
||||
|
||||
gm.upsertGuildMember(guildId, newMember)
|
||||
gm.updatePendingReqs(guildId, accountId, PendingReqIsJoinGuildStatusJoined)
|
||||
|
||||
logContent := fmt.Sprintf("Approve[operator:%s]", operatorAccountId)
|
||||
gm.WriteLog(guildId, accountId, LogTypeApprove, logContent)
|
||||
pendingReq.RemoveUser(accountId)
|
||||
|
||||
return nil
|
||||
gm.upsertGuildMember(guildId, newMember, func(err error) {
|
||||
if err != nil {
|
||||
cb(1, "xxx")
|
||||
return
|
||||
}
|
||||
gm.updatePendingReqs(guildId, accountId, PendingReqIsJoinGuildStatusJoined, func(err error) {
|
||||
logContent := fmt.Sprintf("Approve[operator:%s]", operatorAccountId)
|
||||
gm.WriteLog(guildId, accountId, LogTypeApprove, logContent)
|
||||
guild.RemovePendingReq(accountId)
|
||||
cb(0, "")
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// Reject 拒绝申请者加入公会
|
||||
func (gm *GuildMgr) Reject(guildId int64, accountId string) error {
|
||||
pendingReq, err := gm.GetPendingReq(guildId)
|
||||
if err == nil {
|
||||
return err
|
||||
func (gm *GuildMgr) Reject(operatorAccountId, accountId string, cb func(errCode int32, errMsg string)) {
|
||||
guild := gm.GetGuildByAccountId(operatorAccountId)
|
||||
if guild == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
// 通常默认为审核加入
|
||||
if guild.JoinCond != JoinCondDefault {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
operatorMember := guild.GetMember(operatorAccountId)
|
||||
if operatorMember == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
// 公会干部及以上仅可操作
|
||||
err := gm.checkOperatorPerm(operatorMember, GuildMemberLevelViceLeader)
|
||||
if err != nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
// 是否加入其他公会
|
||||
if !gm.checkJoinGuild(accountId) {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
// 是否在申请队列中
|
||||
pendingReqStatus := guild.GetPendingReqStatus(accountId)
|
||||
if pendingReqStatus < 0 {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
gm.updatePendingReqs(guildId, accountId, PendingReqIsJoinGuildStatusReject)
|
||||
pendingReq.RemoveUser(accountId)
|
||||
|
||||
return nil
|
||||
gm.updatePendingReqs(guild.GuildId, accountId, PendingReqIsJoinGuildStatusReject, func(err error) {
|
||||
guild.RemovePendingReq(accountId)
|
||||
cb(0, "")
|
||||
})
|
||||
}
|
||||
|
||||
// JoinGuild 直接加入公会
|
||||
@ -205,225 +269,210 @@ func (gm *GuildMgr) JoinGuild(guild *Guild, accountId string) {
|
||||
newMember := GuildMember{AccountId: accountId, Level: GuildMemberLevelDefault}
|
||||
guild.AddMember(&newMember)
|
||||
guildId := guild.GuildId
|
||||
gm.upsertGuildMember(guildId, &newMember)
|
||||
gm.upsertGuildMember(guildId, &newMember,
|
||||
func(err error) {
|
||||
})
|
||||
}
|
||||
|
||||
// LeaveGuild 离开公会
|
||||
func (gm *GuildMgr) LeaveGuild(guildId int64, accountId string) error {
|
||||
guild, err := gm.GetGuild(guildId)
|
||||
if err != nil {
|
||||
return err
|
||||
func (gm *GuildMgr) LeaveGuild(accountId string, cb func(errCode int32, errMsg string)) {
|
||||
guild := gm.GetGuildByAccountId(accountId)
|
||||
if guild == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
if guild.LeaderId == accountId {
|
||||
return fmt.Errorf("leader not leave guild")
|
||||
cb(1, "XXX")
|
||||
}
|
||||
member := guild.GetMember(accountId)
|
||||
if member == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
member, err := guild.GetMember(accountId)
|
||||
if err != nil {
|
||||
return fmt.Errorf("member not found in the guild")
|
||||
}
|
||||
|
||||
_ = guild.RemoveMember(accountId)
|
||||
guild.RemoveMember(accountId)
|
||||
fields := [][]string{{"is_leave_guild", q5.ToString(1)}}
|
||||
gm.updateGuildMember(guild, member.AccountId, fields)
|
||||
|
||||
logContent := fmt.Sprintf("LeaveGuild[%d-%s]", guildId, accountId)
|
||||
gm.WriteLog(guildId, accountId, LogTypeLeave, logContent)
|
||||
|
||||
return nil
|
||||
gm.updateGuildMember(guild, member.AccountId, fields,
|
||||
func(err error) {
|
||||
if err != nil {
|
||||
logContent := fmt.Sprintf("LeaveGuild[%d-%s]", guild.GuildId, accountId)
|
||||
gm.WriteLog(guild.GuildId, accountId, LogTypeLeave, logContent)
|
||||
cb(0, "")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// DismissMember 开除成员 踢出
|
||||
func (gm *GuildMgr) DismissMember(guildId int64, operatorAccountId, accountId string) error {
|
||||
guild, err := gm.GetGuild(guildId)
|
||||
if err != nil {
|
||||
return err
|
||||
func (gm *GuildMgr) DismissMember(operatorAccountId, accountId string, cb func(errCode int32, errMsg string)) {
|
||||
guild := gm.GetGuildByAccountId(operatorAccountId)
|
||||
if guild == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
if accountId == guild.LeaderId {
|
||||
return fmt.Errorf("cannot dismiss the leader")
|
||||
if accountId == guild.LeaderId || accountId == operatorAccountId {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
if operatorAccountId == accountId {
|
||||
return fmt.Errorf("cannot dismiss yourself")
|
||||
}
|
||||
|
||||
operatorMember, err := guild.GetMember(operatorAccountId)
|
||||
if err != nil {
|
||||
return err
|
||||
operatorMember := guild.GetMember(operatorAccountId)
|
||||
if operatorMember == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
// 公会干部及以上仅可操作
|
||||
err = gm.checkOperatorPerm(operatorMember, GuildMemberLevelViceLeader)
|
||||
err := gm.checkOperatorPerm(operatorMember, GuildMemberLevelViceLeader)
|
||||
if err != nil {
|
||||
return err
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
dismissMember, err := guild.GetMember(accountId)
|
||||
if err != nil {
|
||||
return err
|
||||
dismissMember := guild.GetMember(accountId)
|
||||
if dismissMember == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
if dismissMember.Level <= operatorMember.Level {
|
||||
return fmt.Errorf("no permission")
|
||||
cb(1, "XXX")
|
||||
}
|
||||
guild.RemoveMember(accountId)
|
||||
|
||||
_ = guild.RemoveMember(accountId)
|
||||
fields := [][]string{{"is_leave_guild", q5.ToString(1)}}
|
||||
gm.updateGuildMember(guild, dismissMember.AccountId, fields)
|
||||
|
||||
logContent := fmt.Sprintf("DismissMember[%d-%s-%s]", guildId, operatorAccountId, accountId)
|
||||
gm.WriteLog(guildId, accountId, LogTypeDismiss, logContent)
|
||||
|
||||
return nil
|
||||
gm.updateGuildMember(guild, dismissMember.AccountId, fields, func(err error) {
|
||||
logContent := fmt.Sprintf("DismissMember[%d-%s-%s]", guild.GuildId, operatorAccountId, accountId)
|
||||
gm.WriteLog(guild.GuildId, accountId, LogTypeDismiss, logContent)
|
||||
cb(0, "")
|
||||
})
|
||||
}
|
||||
|
||||
// PromoteMember 提升成员为干部
|
||||
func (gm *GuildMgr) PromoteMember(guildId int64, operatorAccountId, accountId string) error {
|
||||
guild, err := gm.GetGuild(guildId)
|
||||
if err != nil {
|
||||
return err
|
||||
func (gm *GuildMgr) PromoteMember(operatorAccountId, accountId string, cb func(errCode int32, errMsg string)) {
|
||||
guild := gm.GetGuildByAccountId(operatorAccountId)
|
||||
if guild == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
if accountId == guild.LeaderId {
|
||||
return fmt.Errorf("cannot promote the leader")
|
||||
if accountId == guild.LeaderId || accountId == operatorAccountId {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
// 仅会长操作
|
||||
operatorMember, err := guild.GetMember(operatorAccountId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = gm.checkOperatorPerm(operatorMember, GuildMemberLevelLeader)
|
||||
if err != nil {
|
||||
return err
|
||||
operatorMember := guild.GetMember(operatorAccountId)
|
||||
if operatorMember == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
if operatorAccountId != guild.LeaderId {
|
||||
return fmt.Errorf("PromoteMember: No, leader")
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
member, err := guild.GetMember(accountId)
|
||||
if err != nil {
|
||||
return fmt.Errorf("member not found in the guild")
|
||||
member := guild.GetMember(accountId)
|
||||
if member == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
if member.Level == GuildMemberLevelViceLeader {
|
||||
return nil
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
member.Level = GuildMemberLevelViceLeader
|
||||
fields := [][]string{{"level", q5.ToString(GuildMemberLevelViceLeader)}}
|
||||
gm.updateGuildMember(guild, member.AccountId, fields)
|
||||
|
||||
logContent := fmt.Sprintf("PromoteMember[%d-%s-%s]", guildId, operatorAccountId, accountId)
|
||||
gm.WriteLog(guildId, accountId, LogTypePromote, logContent)
|
||||
|
||||
return nil
|
||||
gm.updateGuildMember(guild, member.AccountId, fields, func(err error) {
|
||||
logContent := fmt.Sprintf("PromoteMember[%d-%s-%s]", guild.GuildId, operatorAccountId, accountId)
|
||||
gm.WriteLog(guild.GuildId, accountId, LogTypeDismiss, logContent)
|
||||
cb(0, "")
|
||||
})
|
||||
}
|
||||
|
||||
// DemoteMember 解除成员干部身份
|
||||
func (gm *GuildMgr) DemoteMember(guildId int64, operatorAccountId, accountId string) error {
|
||||
guild, err := gm.GetGuild(guildId)
|
||||
if err != nil {
|
||||
return err
|
||||
func (gm *GuildMgr) DemoteMember(operatorAccountId, accountId string, cb func(errCode int32, errMsg string)) {
|
||||
guild := gm.GetGuildByAccountId(operatorAccountId)
|
||||
if guild == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
if accountId == guild.LeaderId {
|
||||
return fmt.Errorf("cannot demote the leader")
|
||||
}
|
||||
|
||||
// 仅会长操作
|
||||
operatorMember, err := guild.GetMember(operatorAccountId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = gm.checkOperatorPerm(operatorMember, GuildMemberLevelLeader)
|
||||
if err != nil {
|
||||
return err
|
||||
if accountId == guild.LeaderId || accountId == operatorAccountId {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
// 仅会长可操作
|
||||
if operatorAccountId != guild.LeaderId {
|
||||
return fmt.Errorf("PromoteMember: No, leader")
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
member, err := guild.GetMember(accountId)
|
||||
if err != nil {
|
||||
return fmt.Errorf("member not found in the guild")
|
||||
member := guild.GetMember(accountId)
|
||||
if member == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
if member.Level == GuildMemberLevelDefault {
|
||||
return nil
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
member.Level = GuildMemberLevelDefault
|
||||
fields := [][]string{{"level", q5.ToString(GuildMemberLevelDefault)}}
|
||||
gm.updateGuildMember(guild, member.AccountId, fields)
|
||||
|
||||
logContent := fmt.Sprintf("DemoteMember[%d-%s-%s]", guildId, operatorAccountId, accountId)
|
||||
gm.WriteLog(guildId, accountId, LogTypeDemote, logContent)
|
||||
|
||||
return nil
|
||||
gm.updateGuildMember(guild, member.AccountId, fields, func(err error) {
|
||||
logContent := fmt.Sprintf("DemoteMember[%d-%s-%s]", guild.GuildId, operatorAccountId, accountId)
|
||||
gm.WriteLog(guild.GuildId, accountId, LogTypeDismiss, logContent)
|
||||
cb(0, "")
|
||||
})
|
||||
}
|
||||
|
||||
// Disband 解散公会
|
||||
func (gm *GuildMgr) Disband(guildId int64, accountId string) error {
|
||||
guild, err := gm.GetGuild(guildId)
|
||||
if err != nil {
|
||||
return err
|
||||
func (gm *GuildMgr) Disband(operatorAccountId string, cb func(errCode int32, errMsg string)) {
|
||||
guild := gm.GetGuildByAccountId(operatorAccountId)
|
||||
if guild == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
// 仅会长可操作
|
||||
if accountId != guild.LeaderId {
|
||||
return fmt.Errorf("cannot disband guild")
|
||||
if operatorAccountId != guild.LeaderId {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
guildId := guild.GuildId
|
||||
guildName := guild.Name
|
||||
|
||||
// 解散公会
|
||||
updateFields := [][]string{
|
||||
{"is_deleted", q5.ToString(1)},
|
||||
}
|
||||
gm.updateGuild(guild, updateFields)
|
||||
gm.updateGuild(guild, updateFields, func(err error) {
|
||||
fields := [][]string{{"is_leave_guild", q5.ToString(1)}}
|
||||
gm.updateGuildMembers(guildId, fields, func(err error) {
|
||||
gm.updateAllPendingReqs(guildId, PendingReqIsJoinGuildStatusDisband, func(err error) {
|
||||
logContent := fmt.Sprintf("GuildDisbanded[%d-%s]", guildId, guildName)
|
||||
gm.WriteLog(guildId, operatorAccountId, LogTypeDisband, logContent)
|
||||
|
||||
fields := [][]string{{"is_leave_guild", q5.ToString(1)}}
|
||||
gm.updateGuildMembers(guild, fields)
|
||||
guild.Members = nil
|
||||
gm.guilds[guildId] = nil
|
||||
gm.guildLogs[guildId] = nil
|
||||
|
||||
gm.updateAllPendingReqs(guildId, PendingReqIsJoinGuildStatusDisband)
|
||||
delete(gm.guilds, guildId)
|
||||
delete(gm.guildLogs, guildId)
|
||||
gm.RemoveGuild(guildId)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
guild.Members = nil
|
||||
gm.guilds[guildId] = nil
|
||||
|
||||
gm.pendingReqs[guildId] = nil
|
||||
gm.guildLogs[guildId] = nil
|
||||
delete(gm.guilds, guildId)
|
||||
delete(gm.pendingReqs, guildId)
|
||||
delete(gm.guildLogs, guildId)
|
||||
gm.RemoveGuildsId(guildId)
|
||||
|
||||
logContent := fmt.Sprintf("GuildDisbanded[%d-%s]", guildId, guildName)
|
||||
gm.WriteLog(guildId, accountId, LogTypeDisband, logContent)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetNotice 设置公告
|
||||
func (gm *GuildMgr) SetNotice(guildId int64, accountId string, notice *string) error {
|
||||
guild, err := gm.GetGuild(guildId)
|
||||
if err != nil {
|
||||
return err
|
||||
func (gm *GuildMgr) SetNotice(operatorAccountId string, notice *string, cb func(errCode int32, errMsg string)) {
|
||||
guild := gm.GetGuildByAccountId(operatorAccountId)
|
||||
if guild == nil {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
// 仅会长可操作
|
||||
if accountId != guild.LeaderId {
|
||||
return fmt.Errorf("cannot set guild notices, only leader")
|
||||
if operatorAccountId != guild.LeaderId {
|
||||
cb(1, "XXX")
|
||||
}
|
||||
|
||||
guild.SetNotice(notice)
|
||||
updateFields := [][]string{
|
||||
{"notice", *notice},
|
||||
}
|
||||
gm.updateGuild(guild, updateFields)
|
||||
|
||||
return nil
|
||||
gm.updateGuild(guild, updateFields, func(err error) {
|
||||
if err == nil {
|
||||
cb(0, "")
|
||||
}
|
||||
cb(1, err.Error())
|
||||
})
|
||||
}
|
||||
|
||||
// WriteLog 记录公会日志
|
||||
@ -485,6 +534,11 @@ func (gm *GuildMgr) RandomGuilds() []*Guild {
|
||||
return results
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) existsGuild(guildId int64) bool {
|
||||
_, ok := gm.guilds[guildId]
|
||||
return ok
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) AddGuild(guildId int64, guild *Guild) {
|
||||
if _, exists := gm.guilds[guildId]; !exists {
|
||||
gm.guilds[guildId] = guild
|
||||
@ -499,13 +553,6 @@ func (gm *GuildMgr) GetGuild(guildId int64) (*Guild, error) {
|
||||
return nil, fmt.Errorf("guild not found")
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) GetPendingReq(guildId int64) (*PendingReq, error) {
|
||||
if pendingReq, exists := gm.pendingReqs[guildId]; exists {
|
||||
return pendingReq, nil
|
||||
}
|
||||
return nil, fmt.Errorf("pendingReq not found, guildId:%d", guildId)
|
||||
}
|
||||
|
||||
// GetGuildByAccountId 查询我的工会
|
||||
func (gm *GuildMgr) GetGuildByAccountId(accountId string) *Guild {
|
||||
for _, guild := range gm.guilds {
|
||||
@ -518,25 +565,6 @@ func (gm *GuildMgr) GetGuildByAccountId(accountId string) *Guild {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Info 工会信息
|
||||
func (gm *GuildMgr) Info(accountId string) (*Guild, map[string]bool, []*GuildLog) {
|
||||
guild := gm.GetGuildByAccountId(accountId)
|
||||
pendingReqs := make(map[string]bool, MaxPendingReqs)
|
||||
guildLogs := make([]*GuildLog, DefaultLogs)
|
||||
if guild != nil {
|
||||
guildId := guild.GuildId
|
||||
if p, exists := gm.pendingReqs[guildId]; exists {
|
||||
pendingReqs = p.GetUsers()
|
||||
} else {
|
||||
pendingReqs = nil
|
||||
}
|
||||
|
||||
guildLogs = gm.guildLogs[guildId]
|
||||
}
|
||||
|
||||
return guild, pendingReqs, guildLogs
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) checkOperatorPerm(operatorMember *GuildMember, level int) error {
|
||||
if operatorMember.Level > level {
|
||||
return fmt.Errorf("checkOperatorPerm: no permission[%s-%d]", operatorMember.AccountId, operatorMember.Level)
|
||||
@ -544,13 +572,8 @@ func (gm *GuildMgr) checkOperatorPerm(operatorMember *GuildMember, level int) er
|
||||
return nil
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) checkJoinGuild(accountId string) (bool, error) {
|
||||
guild := gm.GetGuildByAccountId(accountId)
|
||||
if guild != nil {
|
||||
errMsg := fmt.Sprintf("Player:%s has joined other GuildId:%d", accountId, guild.GuildId)
|
||||
return true, fmt.Errorf(errMsg)
|
||||
}
|
||||
return false, nil
|
||||
func (gm *GuildMgr) checkJoinGuild(accountId string) bool {
|
||||
return gm.GetGuildByAccountId(accountId) == nil
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) GetGuildIdByAccountId(accountId string) int64 {
|
||||
@ -568,7 +591,7 @@ func (gm *GuildMgr) loadGuildIds() {
|
||||
}
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) RemoveGuildsId(guildId int64) {
|
||||
func (gm *GuildMgr) RemoveGuild(guildId int64) {
|
||||
guildIndex := -1
|
||||
for i, gId := range gm.guildIds {
|
||||
if gId == guildId {
|
||||
@ -583,13 +606,6 @@ func (gm *GuildMgr) RemoveGuildsId(guildId int64) {
|
||||
gm.guildIds = gm.guildIds[:len(gm.guildIds)-1]
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) GetAllPendingReqs(guildId int64) map[string]bool {
|
||||
if pendingReq, exists := gm.pendingReqs[guildId]; exists {
|
||||
return pendingReq.GetUsers()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) GetGuildLogs(guildId int64) []*GuildLog {
|
||||
if logs, exists := gm.guildLogs[guildId]; exists {
|
||||
return logs
|
||||
|
@ -319,167 +319,169 @@ func (p *Player) CMGuildInfo(hdr *f5.MsgHdr, msg *cs.CMGuildInfo) {
|
||||
|
||||
// CMCreateGuild 创建公会
|
||||
func (p *Player) CMCreateGuild(hdr *f5.MsgHdr, msg *cs.CMCreateGuild) {
|
||||
rspMsg := new(cs.SMCreateGuild)
|
||||
guildId, err := guildMgr.CreateGuild(*msg.Name, p.accountId)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
f5.GetSysLog().Info("CMCreateGuild err:%s\n", errMsg)
|
||||
} else {
|
||||
rspMsg.GuildId = &guildId
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
guildMgr.CreateGuild(*msg.Name, p.accountId,
|
||||
func(errCode int32, errMsg string, guildId int64) {
|
||||
rspMsg := new(cs.SMCreateGuild)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
} else {
|
||||
rspMsg.GuildId = &guildId
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
})
|
||||
}
|
||||
|
||||
// CMApplyToGuild 申请者加入公会
|
||||
func (p *Player) CMApplyToGuild(hdr *f5.MsgHdr, msg *cs.CMApplyToGuild) {
|
||||
rspMsg := new(cs.SMApplyToGuild)
|
||||
err := guildMgr.ApplyToGuild(
|
||||
msg.GetGuildId(),
|
||||
p.accountId,
|
||||
guildMgr.ApplyToGuild(
|
||||
msg.GetGuildId(), p.accountId,
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMApplyToGuild)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
|
||||
f5.GetSysLog().Info("CMApplyToGuild err:%s\n", errMsg)
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
// CMApplyList 请求申请者列表
|
||||
func (p *Player) CMApplyList(hdr *f5.MsgHdr, msg *cs.CMApplyList) {
|
||||
rspMsg := new(cs.SMApplyList)
|
||||
guild := guildMgr.GetGuildByAccountId(p.accountId)
|
||||
if guild == nil {
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
return
|
||||
}
|
||||
for accountId, isPending := range guildMgr.GetAllPendingReqs(guild.GetGuildId()) {
|
||||
if isPending {
|
||||
rspMsg.AccountId = append(rspMsg.AccountId, accountId)
|
||||
if guild != nil {
|
||||
for accountId, status := range guild.PendingReqs {
|
||||
applyInfo := &cs.MFApplyInfo{
|
||||
AccountId: &accountId,
|
||||
Status: &status,
|
||||
}
|
||||
rspMsg.ApplyInfo = append(rspMsg.ApplyInfo, applyInfo)
|
||||
}
|
||||
}
|
||||
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
// CMApprove 同意申请者加入公会
|
||||
func (p *Player) CMApprove(hdr *f5.MsgHdr, msg *cs.CMApprove) {
|
||||
rspMsg := new(cs.SMApprove)
|
||||
applicantAccountId := msg.GetApplicantAccountId()
|
||||
err := guildMgr.Approve(
|
||||
msg.GetGuildId(),
|
||||
p.accountId,
|
||||
applicantAccountId,
|
||||
guildMgr.Approve(
|
||||
p.accountId, msg.GetApplicantAccountId(),
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMApprove)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
f5.GetSysLog().Info("CMApprove err:%s\n", errMsg)
|
||||
}
|
||||
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
// CMReject 拒绝申请者加入公会
|
||||
func (p *Player) CMReject(hdr *f5.MsgHdr, msg *cs.CMReject) {
|
||||
rspMsg := new(cs.SMReject)
|
||||
applicantAccountId := msg.GetApplicantAccountId()
|
||||
err := guildMgr.Reject(
|
||||
msg.GetGuildId(),
|
||||
applicantAccountId,
|
||||
guildMgr.Reject(
|
||||
p.accountId, msg.GetApplicantAccountId(),
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMReject)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
f5.GetSysLog().Info("CMReject err:%s\n", errMsg)
|
||||
}
|
||||
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
// CMLeaveGuild 离开公会
|
||||
func (p *Player) CMLeaveGuild(hdr *f5.MsgHdr, msg *cs.CMLeaveGuild) {
|
||||
rspMsg := new(cs.SMLeaveGuild)
|
||||
|
||||
guildId := msg.GetGuildId()
|
||||
err := guildMgr.LeaveGuild(
|
||||
guildId,
|
||||
guildMgr.LeaveGuild(
|
||||
p.accountId,
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMLeaveGuild)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
f5.GetSysLog().Info("CMLeaveGuild err:%s\n", errMsg)
|
||||
}
|
||||
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
// CMDismissMember 开除成员
|
||||
func (p *Player) CMDismissMember(hdr *f5.MsgHdr, msg *cs.CMDismissMember) {
|
||||
rspMsg := new(cs.SMDismissMember)
|
||||
err := guildMgr.DismissMember(
|
||||
msg.GetGuildId(),
|
||||
guildMgr.DismissMember(
|
||||
p.accountId,
|
||||
msg.GetDismissAccountId(),
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMDismissMember)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
f5.GetSysLog().Info("CMDismissMember err:%s\n", errMsg)
|
||||
}
|
||||
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
// CMPromoteMember 提升成员为干部
|
||||
func (p *Player) CMPromoteMember(hdr *f5.MsgHdr, msg *cs.CMPromoteMember) {
|
||||
rspMsg := new(cs.SMPromoteMember)
|
||||
err := guildMgr.PromoteMember(
|
||||
msg.GetGuildId(),
|
||||
guildMgr.PromoteMember(
|
||||
p.accountId,
|
||||
msg.GetPromoteAccountId(),
|
||||
)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
f5.GetSysLog().Info("CMPromoteMember err:%s\n", errMsg)
|
||||
}
|
||||
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMPromoteMember)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
})
|
||||
}
|
||||
|
||||
// CMDemoteMember 解除成员干部身份
|
||||
func (p *Player) CMDemoteMember(hdr *f5.MsgHdr, msg *cs.CMDemoteMember) {
|
||||
rspMsg := new(cs.SMDemoteMember)
|
||||
err := guildMgr.DemoteMember(
|
||||
msg.GetGuildId(),
|
||||
guildMgr.DemoteMember(
|
||||
p.accountId,
|
||||
msg.GetDemoteAccountId(),
|
||||
)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
f5.GetSysLog().Info("CMDemoteMember err:%s\n", errMsg)
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMDemoteMember)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
})
|
||||
}
|
||||
|
||||
// CMDisband 解散公会
|
||||
func (p *Player) CMDisband(hdr *f5.MsgHdr, msg *cs.CMDisband) {
|
||||
rspMsg := new(cs.SMDisband)
|
||||
err := guildMgr.Disband(
|
||||
msg.GetGuildId(),
|
||||
guildMgr.Disband(
|
||||
p.accountId,
|
||||
)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
f5.GetSysLog().Info("CMDisband err:%s\n", errMsg)
|
||||
}
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMDisband)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
})
|
||||
}
|
||||
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
// CMSetNotice 设置公告
|
||||
func (p *Player) CMSetNotice(hdr *f5.MsgHdr, msg *cs.CMNotice) {
|
||||
guildMgr.SetNotice(
|
||||
p.accountId,
|
||||
msg.Content,
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMNotice)
|
||||
if errCode != 0 {
|
||||
rspMsg.ErrCode = &errCode
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
})
|
||||
}
|
||||
|
||||
// CMSearchGuilds 搜索公会
|
||||
@ -510,22 +512,6 @@ func (p *Player) CMGuildLogs(hdr *f5.MsgHdr, msg *cs.CMGuildLogs) {
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
// CMSetNotice 设置公告
|
||||
func (p *Player) CMSetNotice(hdr *f5.MsgHdr, msg *cs.CMNotice) {
|
||||
rspMsg := new(cs.SMNotice)
|
||||
err := guildMgr.SetNotice(
|
||||
msg.GetGuildId(),
|
||||
p.accountId,
|
||||
msg.Content,
|
||||
)
|
||||
if err != nil {
|
||||
errMsg := err.Error()
|
||||
rspMsg.ErrMsg = &errMsg
|
||||
f5.GetSysLog().Info("CMSetNotice err:%s\n", errMsg)
|
||||
}
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
// FillGuild 填充公共列表
|
||||
func (p *Player) FillGuild(guilds []*Guild) []*cs.MFGuild {
|
||||
var resGuilds []*cs.MFGuild
|
||||
|
@ -361,8 +361,9 @@ message CMCreateGuild
|
||||
// 回复创建公会
|
||||
message SMCreateGuild
|
||||
{
|
||||
optional int64 guild_id = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
optional int64 guild_id = 3;
|
||||
}
|
||||
|
||||
// 请求申请加入公会
|
||||
@ -374,7 +375,8 @@ message CMApplyToGuild
|
||||
// 回复申请加入公会
|
||||
message SMApplyToGuild
|
||||
{
|
||||
optional string err_msg = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
}
|
||||
|
||||
// 请求申请者列表
|
||||
@ -383,96 +385,102 @@ message CMApplyList{}
|
||||
// 回复申请者列表
|
||||
message SMApplyList
|
||||
{
|
||||
repeated string account_id = 1;
|
||||
optional string err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
repeated MFApplyInfo apply_info = 3;
|
||||
}
|
||||
|
||||
message MFApplyInfo {
|
||||
optional string account_id = 2;
|
||||
optional int32 status = 3;
|
||||
}
|
||||
|
||||
// 请求批准申请加入公会
|
||||
message CMApprove
|
||||
{
|
||||
optional int64 guild_id = 1;
|
||||
optional string applicant_account_id = 2;
|
||||
optional string applicant_account_id = 1;
|
||||
}
|
||||
|
||||
// 回复批准申请加入公会
|
||||
message SMApprove
|
||||
{
|
||||
optional string err_msg = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
}
|
||||
|
||||
// 请求拒绝加入公会
|
||||
message CMReject
|
||||
{
|
||||
optional int64 guild_id = 1;
|
||||
optional string applicant_account_id = 2;
|
||||
optional string applicant_account_id = 1;
|
||||
}
|
||||
|
||||
// 回复拒绝加入公会
|
||||
message SMReject
|
||||
{
|
||||
optional string err_msg = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
}
|
||||
|
||||
// 请求离开公会
|
||||
message CMLeaveGuild
|
||||
{
|
||||
optional int64 guild_id = 1;
|
||||
}
|
||||
message CMLeaveGuild{}
|
||||
|
||||
// 回复离开公会
|
||||
message SMLeaveGuild
|
||||
{
|
||||
optional string err_msg = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
}
|
||||
|
||||
// 请求开除成员
|
||||
message CMDismissMember
|
||||
{
|
||||
optional int64 guild_id = 1;
|
||||
optional string dismissAccountId = 2;
|
||||
optional string dismissAccountId = 1;
|
||||
}
|
||||
|
||||
// 回复开除成员
|
||||
message SMDismissMember
|
||||
{
|
||||
optional string err_msg = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
}
|
||||
|
||||
// 请求提升成员为干部
|
||||
message CMPromoteMember
|
||||
{
|
||||
optional int64 guild_id = 1;
|
||||
optional string promoteAccountId = 2;
|
||||
optional string promoteAccountId = 1;
|
||||
}
|
||||
|
||||
// 回复提升成员为干部
|
||||
message SMPromoteMember
|
||||
{
|
||||
optional string err_msg = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
}
|
||||
|
||||
// 请求解除成员干部身份
|
||||
message CMDemoteMember
|
||||
{
|
||||
optional int64 guild_id = 1;
|
||||
optional string demoteAccountId = 2;
|
||||
optional string demoteAccountId = 1;
|
||||
}
|
||||
|
||||
// 回复解除成员干部身份
|
||||
message SMDemoteMember
|
||||
{
|
||||
optional string err_msg = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
}
|
||||
|
||||
// 请求解散公会
|
||||
message CMDisband
|
||||
{
|
||||
optional int64 guild_id = 1;
|
||||
|
||||
}
|
||||
|
||||
// 回复解散公会
|
||||
message SMDisband
|
||||
{
|
||||
optional string err_msg = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
}
|
||||
|
||||
// 请求搜索公会
|
||||
@ -484,7 +492,9 @@ message CMSearchGuilds
|
||||
// 回复搜索公会
|
||||
message SMSearchGuilds
|
||||
{
|
||||
repeated MFGuild guilds = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
repeated MFGuild guilds = 3;
|
||||
}
|
||||
message MFGuild {
|
||||
optional int64 auto_id = 1;
|
||||
@ -502,7 +512,9 @@ message CMGuildLogs{}
|
||||
// 回复公会日志
|
||||
message SMGuildLogs
|
||||
{
|
||||
repeated MFGuildLog guildLogs = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
repeated MFGuildLog guildLogs = 3;
|
||||
}
|
||||
|
||||
message MFGuildLog {
|
||||
@ -516,13 +528,13 @@ message MFGuildLog {
|
||||
// 请求设置公告
|
||||
message CMNotice
|
||||
{
|
||||
optional int64 guild_id = 1;
|
||||
optional string content = 2;
|
||||
optional string content = 1;
|
||||
}
|
||||
|
||||
|
||||
// 回复设置公告
|
||||
message SMNotice
|
||||
{
|
||||
optional string err_msg = 1;
|
||||
optional int32 err_code = 1;
|
||||
optional string err_msg = 2;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user