1
This commit is contained in:
commit
cd2bd5da77
@ -17,7 +17,8 @@ type ChatMgr struct {
|
||||
|
||||
worldMsgId uint64
|
||||
guildMsgId uint64
|
||||
tmpMsgId uint64
|
||||
teamMsgId uint64
|
||||
//tmpMsgId uint64
|
||||
}
|
||||
|
||||
func NewChatMgr(pm *PlayerMgr, fm *FriendsMgr, gm *GuildMgr) *ChatMgr {
|
||||
@ -32,18 +33,18 @@ func NewChatMgr(pm *PlayerMgr, fm *FriendsMgr, gm *GuildMgr) *ChatMgr {
|
||||
// Default values
|
||||
cm.worldMsgId = 1000
|
||||
cm.guildMsgId = 1000
|
||||
cm.tmpMsgId = 1000
|
||||
cm.teamMsgId = 1000
|
||||
|
||||
return cm
|
||||
}
|
||||
|
||||
func (cm *ChatMgr) init() {}
|
||||
|
||||
func (cm *ChatMgr) FillMFChatMsg(msg *cs.MFChatMsg, accountId *string,
|
||||
func (cm *ChatMgr) FillMFChatMsg(msg *cs.MFChatMsg, sender *Player,
|
||||
msgAutoId uint64, chatChannel int32, msgType int32, msgBody *string) {
|
||||
|
||||
msg.MsgUuid = &msgAutoId
|
||||
msg.Sender = accountId
|
||||
msg.Sender = sender.FillMFChatUser()
|
||||
msg.ChatChannel = &chatChannel
|
||||
msg.MsgType = &msgType
|
||||
msg.MsgBody = msgBody
|
||||
@ -91,10 +92,9 @@ func (cm *ChatMgr) FillSMUpdatePrivateChatRedPointNotify(p *Player, msg *cs.SMUp
|
||||
}
|
||||
|
||||
func (cm *ChatMgr) ProcWorldChat(p *Player, msg *cs.CMSendChatMsg) {
|
||||
accountId := p.GetAccountId()
|
||||
chatMsg := new(cs.MFChatMsg)
|
||||
cm.worldMsgId++
|
||||
cm.FillMFChatMsg(chatMsg, &accountId, cm.worldMsgId, *msg.ChatChannel, *msg.MsgType, msg.MsgBody)
|
||||
cm.FillMFChatMsg(chatMsg, p, cm.worldMsgId, *msg.ChatChannel, *msg.MsgType, msg.MsgBody)
|
||||
|
||||
cm.worldMsgRec.CurrID = cm.worldMsgId
|
||||
cm.worldMsgRec.AddChatMsg(chatMsg)
|
||||
@ -114,30 +114,52 @@ func (cm *ChatMgr) ProcGuildChat(p *Player, msg *cs.CMSendChatMsg) {
|
||||
cm.guildMsgId++
|
||||
|
||||
chatMsg := new(cs.MFChatMsg)
|
||||
cm.FillMFChatMsg(chatMsg, &p.accountId, cm.guildMsgId, *msg.ChatChannel, *msg.MsgType, msg.MsgBody)
|
||||
cm.FillMFChatMsg(chatMsg, p, cm.guildMsgId, *msg.ChatChannel, *msg.MsgType, msg.MsgBody)
|
||||
|
||||
if msgRec, exists := cm.guildMsgRec[guildId]; exists {
|
||||
msgRec.AddChatMsg(chatMsg)
|
||||
} else {
|
||||
msgRec := &ChatMsgRec{}
|
||||
msgRec.CurrID = cm.guildMsgId
|
||||
cm.guildMsgRec[guildId] = msgRec
|
||||
newMsgRec := &ChatMsgRec{}
|
||||
newMsgRec.CurrID = cm.guildMsgId
|
||||
newMsgRec.AddChatMsg(chatMsg)
|
||||
cm.guildMsgRec[guildId] = newMsgRec
|
||||
}
|
||||
|
||||
// TraverseMember
|
||||
for _, member := range guild.Members {
|
||||
guildMember := playerMgr.GetPlayerByAccountId(member.GetAccountId())
|
||||
guildMember := cm.pm.GetPlayerByAccountId(member.GetAccountId())
|
||||
if guildMember != nil {
|
||||
cm.SyncGuildChatMsg(guildMember)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (cm *ChatMgr) ProcTeamChat(p *Player, msg *cs.CMSendChatMsg) {
|
||||
chatMsg := new(cs.MFChatMsg)
|
||||
cm.teamMsgId++
|
||||
cm.FillMFChatMsg(chatMsg, p, cm.teamMsgId, *msg.ChatChannel, *msg.MsgType, msg.MsgBody)
|
||||
|
||||
notifyMsg := &cs.SMChatMsgNotify{}
|
||||
notifyMsg.MsgList = append(notifyMsg.MsgList, chatMsg)
|
||||
|
||||
// Traverse msg members
|
||||
for _, accountId := range msg.GetMembers() {
|
||||
p2 := cm.pm.GetPlayerByAccountId(accountId)
|
||||
if p2 != nil {
|
||||
p2.SendMsg(notifyMsg)
|
||||
if p2.chatChannel == kCCTeam {
|
||||
p2.SyncPrivateChatRedPoint()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (cm *ChatMgr) ProcPrivateChat(p *Player, msg *cs.CMSendChatMsg) {
|
||||
targetAccountId := msg.GetTargetAccountId()
|
||||
if p.accountId == targetAccountId {
|
||||
return
|
||||
}
|
||||
|
||||
// 确定是否好友
|
||||
targetAccount := cm.fm.GetFriendByAccountId(p.accountId, targetAccountId)
|
||||
if targetAccount == nil {
|
||||
@ -145,7 +167,7 @@ func (cm *ChatMgr) ProcPrivateChat(p *Player, msg *cs.CMSendChatMsg) {
|
||||
}
|
||||
|
||||
chatMsg := new(cs.MFChatMsg)
|
||||
cm.FillMFChatMsg(chatMsg, &p.accountId, 0, *msg.ChatChannel, *msg.MsgType, msg.MsgBody)
|
||||
cm.FillMFChatMsg(chatMsg, p, 0, *msg.ChatChannel, *msg.MsgType, msg.MsgBody)
|
||||
cm.AddChatUser(p.accountId, msg.GetTargetAccountId(), chatMsg, p.IncrPrivateChatLastId())
|
||||
cm.SyncPrivateChatMsg(p)
|
||||
|
||||
|
@ -74,20 +74,25 @@ const (
|
||||
PendingReqIsJoinGuildStatusDisband = 3 // 等待验证请求状态, 3 公会已解散
|
||||
|
||||
// Event Names
|
||||
EVENT_CREATE = "event_create"
|
||||
EVENT_APPLY = "event_apply"
|
||||
EVENT_APPROVE = "event_approve"
|
||||
EVENT_REJECT = "event_reject"
|
||||
EVENT_JOIN = "event_join"
|
||||
EVENT_LEAVE = "event_leave"
|
||||
EVENT_DISMISS_MEMBER = "event_dismiss_member"
|
||||
EVENT_SET_MEMBER_LEVEL = "event_set_member_level"
|
||||
EVENT_DISBAND = "event_disband"
|
||||
EVENT_SET_NOTICE = "event_set_notice"
|
||||
EVENT_GUILD_CREATE = "event_guild_create"
|
||||
EVENT_GUILD_APPLY = "event_guild_apply"
|
||||
EVENT_GUILD_APPROVE = "event_guild_approve"
|
||||
EVENT_GUILD_REJECT = "event_guild_reject"
|
||||
EVENT_GUILD_JOIN = "event_guild_join"
|
||||
EVENT_GUILD_LEAVE = "event_guild_leave"
|
||||
EVENT_GUILD_DISMISS_MEMBER = "event_guild_dismiss_member"
|
||||
EVENT_GUILD_DISBAND = "event_guild_disband"
|
||||
EVENT_GUILD_SET_MEMBER_LEVEL = "event_guild_set_member_level"
|
||||
EVENT_GUILD_SET_NAME = "event_guild_set_name"
|
||||
EVENT_GUILD_SET_NOTICE = "event_guild_set_notice"
|
||||
|
||||
// Err code
|
||||
ERR_CODE_OK = 0
|
||||
|
||||
// Login and Reconnect
|
||||
ERR_CODE_RECONNECT_PLAYER_NO_EXISTS = 10001
|
||||
ERR_CODE_RECONNECT_PLAYER_SESSION_ID_NO_VALID = 10002
|
||||
|
||||
// Friemds
|
||||
ERR_CODE_USERS_NO_EXISTS = 11001
|
||||
ERR_CODE_FRIENDSHIP_IS_FULL = 11002
|
||||
@ -125,4 +130,6 @@ const (
|
||||
ERR_CODE_UPDATE_GUILD_PENDING_REQUEST_DB_FAIL = 12017
|
||||
ERR_CODE_REQUEST_PARAMS_ERROR = 12018
|
||||
ERR_CODE_GUILD_SETMEMBERLEVEL_VICE_LEADER_MAX_LIMIT = 12019
|
||||
ERR_CODE_GUILD_SETNAME_DUPLICATE_NAMES = 12020
|
||||
ERR_CODE_GUILD_SETNAME_API_ERROR = 12021
|
||||
)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -151,34 +151,31 @@ func (fm *FriendsMgr) AcceptFriendRequest(account1Id string, account2Id string,
|
||||
}
|
||||
user2.Friendships[account1Id] = friendship2
|
||||
|
||||
//cacheMgr.LoadPlayerProfile(user1, func(playerProfile *PlayerProfile) {})
|
||||
//cacheMgr.LoadPlayerProfile(user2, func(playerProfile *PlayerProfile) {})
|
||||
|
||||
cb(ERR_CODE_OK, "")
|
||||
})
|
||||
}
|
||||
|
||||
// RejectFriendRequest 拒绝好友请求
|
||||
func (fm *FriendsMgr) RejectFriendRequest(account1Id string, account2Id string, cb func(errCode int32, errMsg string)) {
|
||||
User1 := fm.GetUser(account1Id)
|
||||
user1 := fm.GetUser(account1Id)
|
||||
user2 := fm.GetUser(account2Id)
|
||||
if user2 == nil {
|
||||
user2 = fm.LoadUser(account2Id)
|
||||
}
|
||||
//if User1 == nil || user2 == nil {
|
||||
// cb(ERR_CODE_USERS_NO_EXISTS, "RejectFriendRequest user no exists")
|
||||
// return
|
||||
//}
|
||||
if user1 == nil || user2 == nil {
|
||||
cb(ERR_CODE_USERS_NO_EXISTS, "RejectFriendRequest user no exists")
|
||||
return
|
||||
}
|
||||
|
||||
requestTime := time.Now().Unix()
|
||||
fm.upsertFriendShip(account2Id, account1Id, FriendshipStatusReject, requestTime, func(err error) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_UPDATE_PENDING_REQUEST_DB_FAIL, "RejectFriendRequest update pending request db error")
|
||||
return
|
||||
}
|
||||
User1.RemoveFriendRequest(account2Id)
|
||||
user1.RemoveFriendRequest(account2Id)
|
||||
user2.RemoveFriendRequest(account1Id)
|
||||
cb(ERR_CODE_OK, "")
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -56,14 +56,6 @@ func (g *Guild) GetMembersViceLeaderCount() int {
|
||||
return count
|
||||
}
|
||||
|
||||
// GetMember 根据 AccountId 获取成员信息
|
||||
func (g *Guild) GetMember(accountId string) *GuildMember {
|
||||
if member, exists := g.Members[accountId]; exists {
|
||||
return member
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// IsMember 是否是公会成员
|
||||
func (g *Guild) IsMember(accountId string) bool {
|
||||
_, exists := g.Members[accountId]
|
||||
@ -86,6 +78,22 @@ func (g *Guild) RemoveMember(accountId string) {
|
||||
delete(g.Members, accountId)
|
||||
}
|
||||
|
||||
// GetMember 获取成员
|
||||
func (g *Guild) GetMember(accountId string) *GuildMember {
|
||||
if member, exists := g.Members[accountId]; exists {
|
||||
return member
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetMemberLevel 获取成员职位
|
||||
func (g *Guild) GetMemberLevel(accountId string) int32 {
|
||||
if member, exists := g.Members[accountId]; exists {
|
||||
return member.Level
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (g *Guild) SetNotice(notice *string) {
|
||||
g.Notice = *notice
|
||||
}
|
||||
|
@ -57,9 +57,7 @@ func (gm *GuildMgr) loadGuildFromDBResult(err error, rows *f5.DataSet) {
|
||||
Members: make(map[string]*GuildMember, MaxMembers),
|
||||
PendingReqs: make(map[string]int32, MaxPendingReqs),
|
||||
}
|
||||
|
||||
gm.guilds[guildId] = guild
|
||||
gm.guildIds = append(gm.guildIds, guildId)
|
||||
}
|
||||
q5.UnSetBitFlag(&gm.loadedFlags, LoadGuildFlag)
|
||||
}
|
||||
|
@ -2,9 +2,11 @@ package main
|
||||
|
||||
import (
|
||||
"cs"
|
||||
"encoding/json"
|
||||
"f5"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"mt"
|
||||
"q5"
|
||||
"time"
|
||||
)
|
||||
@ -19,7 +21,6 @@ const (
|
||||
type GuildMgr struct {
|
||||
cs.MsgHandlerImpl
|
||||
guilds map[int64]*Guild // 公会ID -> 公会
|
||||
guildIds []int64 // 公会列表 guildIds
|
||||
guildLogs map[int64][]*GuildLog // 公会ID -> []公会日志列表
|
||||
userGuilds map[string]int64 // accountId -> 公会ID
|
||||
loadedFlags int64
|
||||
@ -34,7 +35,6 @@ func NewGuildMgr() *GuildMgr {
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) init() {
|
||||
gm.guildIds = make([]int64, 0, 200)
|
||||
gm.loadFromDB()
|
||||
}
|
||||
|
||||
@ -61,15 +61,18 @@ func (gm *GuildMgr) loadFromDB() {
|
||||
func (gm *GuildMgr) CreateGuild(avatar int32, name *string, leaderId string,
|
||||
cb func(errCode int32, errMsg string, guild *Guild)) {
|
||||
if gm.CheckJoinGuild(leaderId) {
|
||||
cb(ERR_CODE_JOINED_GUILD, "Joined guild", nil)
|
||||
cb(ERR_CODE_JOINED_GUILD, "Joined guild", nil)
|
||||
return
|
||||
}
|
||||
|
||||
guildId := f5.GetApp().NewUuid()
|
||||
if gm.ExistsGuild(guildId) {
|
||||
cb(ERR_CODE_CREATE_GUILD_FAIL, "create error ", nil)
|
||||
return
|
||||
}
|
||||
if !gm.CheckGuildNameUnique(name) {
|
||||
cb(ERR_CODE_CREATE_GUILD_FAIL, "Duplicate guild names", nil)
|
||||
return
|
||||
}
|
||||
|
||||
unixSec := time.Now().Unix()
|
||||
fields := [][]string{
|
||||
@ -85,9 +88,10 @@ func (gm *GuildMgr) CreateGuild(avatar int32, name *string, leaderId string,
|
||||
FRIEND_DB,
|
||||
"t_guild",
|
||||
fields,
|
||||
func(err error, id int64, affectedRows int64) {
|
||||
func(err error, lastInsertId int64, affectedRows int64) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_CREATE_GUILD_DB_FAIL, "create guild db error ", nil)
|
||||
f5.GetSysLog().Info("create guild db error:%s", err)
|
||||
return
|
||||
}
|
||||
newMember := &GuildMember{AccountId: leaderId, Level: GuildMemberLevelLeader}
|
||||
@ -95,11 +99,12 @@ func (gm *GuildMgr) CreateGuild(avatar int32, name *string, leaderId string,
|
||||
func(err error) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_CREATE_GUILD_MEMBER_DB_FAIL, "create guild member db error", nil)
|
||||
f5.GetSysLog().Info("create guild member db error:%s", err)
|
||||
return
|
||||
}
|
||||
|
||||
guild := &Guild{
|
||||
AutoId: id,
|
||||
AutoId: lastInsertId,
|
||||
GuildId: guildId,
|
||||
Name: *name,
|
||||
LeaderId: leaderId,
|
||||
@ -120,14 +125,15 @@ func (gm *GuildMgr) CreateGuild(avatar int32, name *string, leaderId string,
|
||||
|
||||
// Add event
|
||||
prop := make(map[string]string)
|
||||
prop["auto_id"] = q5.ToString(id)
|
||||
prop["auto_id"] = q5.ToString(lastInsertId)
|
||||
prop["guild_id"] = q5.ToString(guildId)
|
||||
prop["guild_name"] = *name
|
||||
prop["avatar"] = q5.ToString(avatar)
|
||||
f5.GetTgLog().AddTrackLog(
|
||||
GAME_ID,
|
||||
leaderId,
|
||||
"127.0.0.1",
|
||||
EVENT_CREATE,
|
||||
EVENT_GUILD_CREATE,
|
||||
prop,
|
||||
)
|
||||
cb(ERR_CODE_OK, "Create OK", guild)
|
||||
@ -211,7 +217,7 @@ func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string, cb fu
|
||||
GAME_ID,
|
||||
applicantAccountId,
|
||||
"127.0.0.1",
|
||||
EVENT_APPLY,
|
||||
EVENT_GUILD_APPLY,
|
||||
prop,
|
||||
)
|
||||
cb(ERR_CODE_OK, "ApplyToGuild ok", guild)
|
||||
@ -284,7 +290,7 @@ func (gm *GuildMgr) Approve(operatorAccountId, accountId string, cb func(errCode
|
||||
GAME_ID,
|
||||
operatorAccountId,
|
||||
"127.0.0.1",
|
||||
EVENT_APPROVE,
|
||||
EVENT_GUILD_APPROVE,
|
||||
prop,
|
||||
)
|
||||
|
||||
@ -327,26 +333,25 @@ func (gm *GuildMgr) Reject(operatorAccountId, accountId string, cb func(errCode
|
||||
|
||||
gm.updatePendingReqs(guild.GuildId, accountId, PendingReqIsJoinGuildStatusReject, func(err error) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_UPDATE_GUILD_PENDING_REQUEST_DB_FAIL, "Reject db error")
|
||||
return
|
||||
}
|
||||
|
||||
guild.RemovePendingReq(accountId)
|
||||
// Add event
|
||||
prop := make(map[string]string)
|
||||
prop["guild_id"] = q5.ToString(guild.GuildId)
|
||||
prop["reject_account_id"] = q5.ToString(accountId)
|
||||
prop["members_count"] = q5.ToString(guild.GetMembersCount())
|
||||
f5.GetTgLog().AddTrackLog(
|
||||
GAME_ID,
|
||||
operatorAccountId,
|
||||
"127.0.0.1",
|
||||
EVENT_REJECT,
|
||||
prop,
|
||||
)
|
||||
|
||||
cb(ERR_CODE_OK, "Reject ok")
|
||||
})
|
||||
|
||||
guild.RemovePendingReq(accountId)
|
||||
// Add event
|
||||
prop := make(map[string]string)
|
||||
prop["guild_id"] = q5.ToString(guild.GuildId)
|
||||
prop["reject_account_id"] = q5.ToString(accountId)
|
||||
prop["members_count"] = q5.ToString(guild.GetMembersCount())
|
||||
f5.GetTgLog().AddTrackLog(
|
||||
GAME_ID,
|
||||
operatorAccountId,
|
||||
"127.0.0.1",
|
||||
EVENT_GUILD_REJECT,
|
||||
prop,
|
||||
)
|
||||
|
||||
cb(ERR_CODE_OK, "Reject ok")
|
||||
}
|
||||
|
||||
// JoinGuild 直接加入公会
|
||||
@ -375,7 +380,7 @@ func (gm *GuildMgr) JoinGuild(guild *Guild, accountId string, cb func(errCode in
|
||||
GAME_ID,
|
||||
accountId,
|
||||
"127.0.0.1",
|
||||
EVENT_JOIN,
|
||||
EVENT_GUILD_JOIN,
|
||||
prop,
|
||||
)
|
||||
})
|
||||
@ -454,7 +459,7 @@ func (gm *GuildMgr) LeaveGuild(accountId string, cb func(errCode int32, errMsg s
|
||||
GAME_ID,
|
||||
accountId,
|
||||
"127.0.0.1",
|
||||
EVENT_LEAVE,
|
||||
EVENT_GUILD_LEAVE,
|
||||
prop,
|
||||
)
|
||||
cb(ERR_CODE_OK, "LeaveGuild OK", guild)
|
||||
@ -515,7 +520,7 @@ func (gm *GuildMgr) DismissMember(operatorAccountId, accountId string, cb func(e
|
||||
GAME_ID,
|
||||
operatorAccountId,
|
||||
"127.0.0.1",
|
||||
EVENT_DISMISS_MEMBER,
|
||||
EVENT_GUILD_DISMISS_MEMBER,
|
||||
prop,
|
||||
)
|
||||
|
||||
@ -588,86 +593,11 @@ func (gm *GuildMgr) SetMemberLevel(operatorAccountId, accountId string, newLevel
|
||||
GAME_ID,
|
||||
operatorAccountId,
|
||||
"127.0.0.1",
|
||||
EVENT_SET_MEMBER_LEVEL,
|
||||
EVENT_GUILD_SET_MEMBER_LEVEL,
|
||||
prop,
|
||||
)
|
||||
|
||||
cb(ERR_CODE_OK, "SetMemberLevel OK", guild)
|
||||
|
||||
// 转让公长
|
||||
//if newLevel == GuildMemberLevelLeader {
|
||||
// updateFields := [][]string{
|
||||
// {"leader_account_id", q5.ToString(guild.LeaderId)},
|
||||
// }
|
||||
// gm.updateGuild(guild, updateFields, nil)
|
||||
// guild.LeaderId = member.AccountId
|
||||
// oldMember := guild.GetMember(operatorAccountId)
|
||||
// oldMemberFields := [][]string{{"level", q5.ToString(GuildMemberLevelDefault)}}
|
||||
// gm.updateGuildMember(guild, oldMember.AccountId, oldMemberFields, nil)
|
||||
// oldMember.Level = GuildMemberLevelDefault
|
||||
//}
|
||||
//
|
||||
//gm.updateGuildMember(guild, member.AccountId, fields, func(err error) {
|
||||
// if err != nil {
|
||||
// cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error())
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// // 转让会长的操作
|
||||
// if newLevel == GuildMemberLevelLeader {
|
||||
// updateFields := [][]string{
|
||||
// {"leader_account_id", q5.ToString(member.AccountId)},
|
||||
// }
|
||||
// gm.updateGuild(guild, updateFields, func(err error) {
|
||||
// if err != nil {
|
||||
// cb(ERR_CODE_UPDATE_GUILD_DB_FAIL, err.Error())
|
||||
// return
|
||||
// }
|
||||
// guild.LeaderId = member.AccountId
|
||||
// // 旧会长 -> 普通成员
|
||||
// oldMember := guild.GetMember(operatorAccountId)
|
||||
// oldMemberFields := [][]string{{"level", q5.ToString(GuildMemberLevelDefault)}}
|
||||
// gm.updateGuildMember(guild, oldMember.AccountId, oldMemberFields,
|
||||
// func(err error) {
|
||||
// if err != nil {
|
||||
// cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error())
|
||||
// return
|
||||
// }
|
||||
// oldMember.Level = GuildMemberLevelDefault
|
||||
// })
|
||||
// })
|
||||
// }
|
||||
//
|
||||
// newMemberFields := [][]string{{"level", q5.ToString(newLevel)}}
|
||||
// gm.updateGuildMember(guild, member.AccountId, newMemberFields,
|
||||
// func(err error) {
|
||||
// if err != nil {
|
||||
// cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error())
|
||||
// return
|
||||
// }
|
||||
// member.Level = newLevel
|
||||
// })
|
||||
//
|
||||
// logContent := fmt.Sprintf("SetMemberLevel[%d-%s-%s-%d-%d]", guild.GuildId, operatorAccountId, accountId, beforeLevel, newLevel)
|
||||
// gm.WriteLog(guild.GuildId, accountId, LogTypeChangeLevel, logContent)
|
||||
//
|
||||
// // Add event
|
||||
// prop := make(map[string]string)
|
||||
// prop["guild_id"] = q5.ToString(guild.GuildId)
|
||||
// prop["accountId"] = q5.ToString(accountId)
|
||||
// prop["beforeMemberLevel"] = q5.ToString(beforeLevel)
|
||||
// prop["afterMemberLevel"] = q5.ToString(newLevel)
|
||||
// prop["members_count"] = q5.ToString(guild.GetMembersCount())
|
||||
// f5.GetTgLog().AddTrackLog(
|
||||
// GAME_ID,
|
||||
// operatorAccountId,
|
||||
// "127.0.0.1",
|
||||
// EVENT_SET_MEMBER_LEVEL,
|
||||
// prop,
|
||||
// )
|
||||
//
|
||||
// cb(ERR_CODE_OK, "SetMemberLevel OK")
|
||||
//})
|
||||
}
|
||||
|
||||
// Disband 解散公会
|
||||
@ -695,44 +625,46 @@ func (gm *GuildMgr) Disband(operatorAccountId string, cb func(errCode int32, err
|
||||
cb(ERR_CODE_UPDATE_GUILD_DB_FAIL, err.Error(), nil)
|
||||
return
|
||||
}
|
||||
fields := [][]string{{"is_leave_guild", q5.ToString(1)}}
|
||||
gm.updateGuildMembers(guildId, fields, func(err error) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error(), nil)
|
||||
return
|
||||
}
|
||||
gm.updateAllPendingReqs(guildId, PendingReqIsJoinGuildStatusDisband, func(err error) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_UPDATE_GUILD_PENDING_REQUEST_DB_FAIL, err.Error(), nil)
|
||||
return
|
||||
}
|
||||
logContent := fmt.Sprintf("GuildDisbanded[%d-%s]", guildId, guildName)
|
||||
gm.WriteLog(guildId, operatorAccountId, LogTypeDisband, logContent)
|
||||
|
||||
// delete user guilds
|
||||
for _, member := range guild.Members {
|
||||
delete(gm.userGuilds, member.AccountId)
|
||||
}
|
||||
guild.Members = nil
|
||||
delete(gm.guilds, guildId)
|
||||
delete(gm.guildLogs, guildId)
|
||||
gm.RemoveGuild(guildId)
|
||||
|
||||
// Add event
|
||||
prop := make(map[string]string)
|
||||
prop["guild_id"] = q5.ToString(guild.GuildId)
|
||||
f5.GetTgLog().AddTrackLog(
|
||||
GAME_ID,
|
||||
operatorAccountId,
|
||||
"127.0.0.1",
|
||||
EVENT_DISBAND,
|
||||
prop,
|
||||
)
|
||||
|
||||
cb(ERR_CODE_OK, "Disband ok", guild)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
updateGuildMembersFields := [][]string{{"is_leave_guild", q5.ToString(1)}}
|
||||
gm.updateGuildMembers(guildId, updateGuildMembersFields, func(err error) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL, err.Error(), nil)
|
||||
return
|
||||
}
|
||||
})
|
||||
|
||||
gm.updateAllPendingReqs(guildId, PendingReqIsJoinGuildStatusDisband, func(err error) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_UPDATE_GUILD_PENDING_REQUEST_DB_FAIL, err.Error(), nil)
|
||||
return
|
||||
}
|
||||
})
|
||||
|
||||
logContent := fmt.Sprintf("GuildDisbanded[%d-%s]", guildId, guildName)
|
||||
gm.WriteLog(guildId, operatorAccountId, LogTypeDisband, logContent)
|
||||
|
||||
// delete user guilds
|
||||
for _, member := range guild.Members {
|
||||
delete(gm.userGuilds, member.AccountId)
|
||||
}
|
||||
guild.Members = nil
|
||||
delete(gm.guilds, guildId)
|
||||
delete(gm.guildLogs, guildId)
|
||||
|
||||
// Add event
|
||||
prop := make(map[string]string)
|
||||
prop["guild_id"] = q5.ToString(guild.GuildId)
|
||||
f5.GetTgLog().AddTrackLog(
|
||||
GAME_ID,
|
||||
operatorAccountId,
|
||||
"127.0.0.1",
|
||||
EVENT_GUILD_DISBAND,
|
||||
prop,
|
||||
)
|
||||
|
||||
cb(ERR_CODE_OK, "Disband ok", guild)
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) CheckGuildAndPermission(operatorAccountId string) (*Guild, bool) {
|
||||
@ -746,6 +678,15 @@ func (gm *GuildMgr) CheckGuildAndPermission(operatorAccountId string) (*Guild, b
|
||||
return guild, true
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) CheckGuildNameUnique(newName *string) bool {
|
||||
for _, g := range gm.guilds {
|
||||
if g.Name == *newName {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) SetAvatar(operatorAccountId string, avatar int32, cb func(errCode int32, errMsg string)) {
|
||||
guild, ok := gm.CheckGuildAndPermission(operatorAccountId)
|
||||
if !ok || guild.Avatar == avatar {
|
||||
@ -763,31 +704,89 @@ func (gm *GuildMgr) SetAvatar(operatorAccountId string, avatar int32, cb func(er
|
||||
}
|
||||
guild.Avatar = avatar
|
||||
|
||||
cb(ERR_CODE_OK, "SetNotice OK")
|
||||
cb(ERR_CODE_OK, "SetAvatar OK")
|
||||
})
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) SetName(operatorAccountId string, name *string, cb func(errCode int32, errMsg string)) {
|
||||
guild, ok := gm.CheckGuildAndPermission(operatorAccountId)
|
||||
if !ok || name == nil || guild.Name == *name {
|
||||
func (gm *GuildMgr) SetName(player *Player, name *string, itemId, itemNum int32, cb func(errCode int32, errMsg string)) {
|
||||
guild, ok := gm.CheckGuildAndPermission(player.GetAccountId())
|
||||
if !ok || name == nil {
|
||||
cb(ERR_CODE_REQUEST_PARAMS_ERROR, "params is null")
|
||||
return
|
||||
}
|
||||
|
||||
updateFields := [][]string{
|
||||
{"name", *name},
|
||||
if !gm.CheckGuildNameUnique(name) {
|
||||
cb(ERR_CODE_GUILD_SETNAME_DUPLICATE_NAMES, "Duplicate guild names")
|
||||
return
|
||||
}
|
||||
gm.updateGuild(guild, updateFields, func(err error) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_UPDATE_GUILD_DB_FAIL, err.Error())
|
||||
|
||||
// 扣消耗
|
||||
gm.SetNameConsume(player, itemId, itemNum, func(errCode int32, errMsg string) {
|
||||
if errCode != 0 {
|
||||
cb(errCode, errMsg)
|
||||
return
|
||||
}
|
||||
guild.Name = *name
|
||||
updateFields := [][]string{
|
||||
{"name", *name},
|
||||
}
|
||||
|
||||
cb(ERR_CODE_OK, "SetNotice OK")
|
||||
gm.updateGuild(guild, updateFields, func(err error) {
|
||||
if err != nil {
|
||||
cb(ERR_CODE_UPDATE_GUILD_DB_FAIL, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// Add event
|
||||
prop := map[string]string{
|
||||
"guild_id": q5.ToString(guild.GuildId),
|
||||
"accountId": q5.ToString(player.GetAccountId()),
|
||||
"before_guild_name": guild.Name,
|
||||
"after_guild_name": *name,
|
||||
}
|
||||
f5.GetTgLog().AddTrackLog(
|
||||
GAME_ID,
|
||||
player.GetAccountId(),
|
||||
"127.0.0.1",
|
||||
EVENT_GUILD_SET_NAME,
|
||||
prop,
|
||||
)
|
||||
|
||||
guild.Name = *name
|
||||
cb(ERR_CODE_OK, "SetName OK")
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) SetNameConsume(player *Player, itemId, itemNum int32, cb func(errCode int32, errMsg string)) {
|
||||
params := map[string]string{
|
||||
"c": "Bag",
|
||||
"a": "useItem",
|
||||
"account_id": player.GetAccountId(),
|
||||
"session_id": player.GetSessionId(),
|
||||
"item_id": q5.ToString(itemId),
|
||||
"item_num": q5.ToString(itemNum),
|
||||
}
|
||||
url := fmt.Sprintf("%s/webapp/index.php", mt.Table.Config.GetById(0).GetGameapiUrl())
|
||||
|
||||
f5.GetSysLog().Info("SetNameConsume url:%s, params:%+v\n", url, params)
|
||||
|
||||
f5.GetHttpCliMgr().SendJsStyleRequest(
|
||||
url,
|
||||
params,
|
||||
func(rsp f5.HttpCliResponse) {
|
||||
resObj := struct {
|
||||
ErrCode int32 `json:"errcode"`
|
||||
ErrMsg string `json:"errmsg"`
|
||||
}{}
|
||||
err := json.Unmarshal([]byte(rsp.GetRawData()), &resObj)
|
||||
if err != nil {
|
||||
cb(ERR_CODE_GUILD_SETNAME_API_ERROR, "SetNameConsume Api服务器JSON解析错误")
|
||||
f5.GetSysLog().Info("SetNameConsume Api服务器JSON解析错误:%s\n", err)
|
||||
return
|
||||
}
|
||||
cb(resObj.ErrCode, resObj.ErrMsg)
|
||||
})
|
||||
}
|
||||
|
||||
// SetNotice 设置公告
|
||||
func (gm *GuildMgr) SetNotice(operatorAccountId string, notice *string, cb func(errCode int32, errMsg string)) {
|
||||
guild, ok := gm.CheckGuildAndPermission(operatorAccountId)
|
||||
@ -804,6 +803,22 @@ func (gm *GuildMgr) SetNotice(operatorAccountId string, notice *string, cb func(
|
||||
cb(ERR_CODE_UPDATE_GUILD_DB_FAIL, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// Add event
|
||||
prop := map[string]string{
|
||||
"guild_id": q5.ToString(guild.GuildId),
|
||||
"accountId": q5.ToString(operatorAccountId),
|
||||
"before_notice": guild.Notice,
|
||||
"after_notice": *notice,
|
||||
}
|
||||
f5.GetTgLog().AddTrackLog(
|
||||
GAME_ID,
|
||||
operatorAccountId,
|
||||
"127.0.0.1",
|
||||
EVENT_GUILD_SET_NOTICE,
|
||||
prop,
|
||||
)
|
||||
|
||||
guild.Notice = *notice
|
||||
cb(ERR_CODE_OK, "SetNotice OK")
|
||||
})
|
||||
@ -882,25 +897,28 @@ func (gm *GuildMgr) SearchGuild(sinceId int64, name string, cb func(errCode int3
|
||||
|
||||
// RandomGuilds 随机10个公会
|
||||
func (gm *GuildMgr) RandomGuilds() []*Guild {
|
||||
count := len(gm.guilds)
|
||||
|
||||
var results []*Guild
|
||||
if count <= RandomGuildCount {
|
||||
for _, guildId := range gm.guildIds {
|
||||
results = append(results, gm.guilds[guildId])
|
||||
if len(gm.guilds) <= RandomGuildCount {
|
||||
var guilds []*Guild
|
||||
for _, guild := range gm.guilds {
|
||||
guilds = append(guilds, guild)
|
||||
}
|
||||
return results
|
||||
return guilds
|
||||
}
|
||||
|
||||
for i := 0; i < RandomGuildCount; i++ {
|
||||
j := rand.Intn(len(gm.guildIds))
|
||||
gm.guildIds[i], gm.guildIds[j] = gm.guildIds[j], gm.guildIds[i]
|
||||
guildIds := make([]int64, 0, len(gm.guilds))
|
||||
for guildId := range gm.guilds {
|
||||
guildIds = append(guildIds, guildId)
|
||||
}
|
||||
|
||||
rand.Shuffle(len(guildIds), func(i, j int) {
|
||||
guildIds[i], guildIds[j] = guildIds[j], guildIds[i]
|
||||
})
|
||||
|
||||
shuffledGuilds := make([]*Guild, RandomGuildCount)
|
||||
for i := 0; i < RandomGuildCount; i++ {
|
||||
randGuildId := gm.guildIds[i]
|
||||
results = append(results, gm.guilds[randGuildId])
|
||||
shuffledGuilds[i] = gm.guilds[guildIds[i]]
|
||||
}
|
||||
return results
|
||||
return shuffledGuilds
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) CheckOperatorPerm(operatorMember *GuildMember, level int32) error {
|
||||
@ -926,7 +944,6 @@ func (gm *GuildMgr) RemoveUserGuild(accountId string) {
|
||||
func (gm *GuildMgr) AddGuild(guildId int64, guild *Guild) {
|
||||
if _, exists := gm.guilds[guildId]; !exists {
|
||||
gm.guilds[guildId] = guild
|
||||
gm.guildIds = append(gm.guildIds, guildId)
|
||||
}
|
||||
}
|
||||
|
||||
@ -958,28 +975,6 @@ func (gm *GuildMgr) CheckJoinGuild(accountId string) bool {
|
||||
return exists
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) loadGuildIds() {
|
||||
gm.guildIds = make([]int64, 0, len(gm.guilds))
|
||||
for guildId := range gm.guilds {
|
||||
gm.guildIds = append(gm.guildIds, guildId)
|
||||
}
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) RemoveGuild(guildId int64) {
|
||||
guildIndex := -1
|
||||
for i, gId := range gm.guildIds {
|
||||
if gId == guildId {
|
||||
guildIndex = i
|
||||
}
|
||||
}
|
||||
if guildIndex < 0 {
|
||||
return
|
||||
}
|
||||
copy(gm.guildIds[guildIndex:], gm.guildIds[guildIndex+1:])
|
||||
gm.guildIds[len(gm.guildIds)-1] = 0
|
||||
gm.guildIds = gm.guildIds[:len(gm.guildIds)-1]
|
||||
}
|
||||
|
||||
func (gm *GuildMgr) GetGuildLogs(guildId int64) []*GuildLog {
|
||||
if logs, exists := gm.guildLogs[guildId]; exists {
|
||||
return logs
|
||||
|
@ -14,6 +14,7 @@ func (this *HandlerMgr) init() {
|
||||
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMPing), PLAYER_MGR_HANDLER_ID)
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMLogin), PLAYER_MGR_HANDLER_ID)
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMReconnect), PLAYER_MGR_HANDLER_ID)
|
||||
|
||||
// 好友
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMSearchUser), PLAYER_HANDLER_ID)
|
||||
@ -44,6 +45,12 @@ func (this *HandlerMgr) init() {
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMSetAvatar), PLAYER_HANDLER_ID)
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMSetJoinCond), PLAYER_HANDLER_ID)
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMSetMemberLevel), PLAYER_HANDLER_ID)
|
||||
|
||||
// 聊天
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMSendChatMsg), PLAYER_HANDLER_ID)
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMReadMsgAndOpenChatNotify), PLAYER_HANDLER_ID)
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMSetCurrPrivateChatTarget), PLAYER_HANDLER_ID)
|
||||
cs.RegHandlerId(int(cs.CMMessageIdE__CMCloseChatNotify), PLAYER_HANDLER_ID)
|
||||
}
|
||||
|
||||
func (this *HandlerMgr) unInit() {
|
||||
|
@ -3,6 +3,7 @@ package mt
|
||||
import (
|
||||
"f5"
|
||||
"mtb"
|
||||
"q5"
|
||||
)
|
||||
|
||||
type IMCluster struct {
|
||||
@ -11,13 +12,18 @@ type IMCluster struct {
|
||||
|
||||
type IMClusterTable struct {
|
||||
f5.IdMetaTable[IMCluster]
|
||||
selfConf *IMCluster
|
||||
selfConf *IMCluster
|
||||
serverInfo string
|
||||
}
|
||||
|
||||
func (this *IMCluster) Init1() {
|
||||
|
||||
}
|
||||
|
||||
func (this *IMClusterTable) GetIp() string {
|
||||
return q5.GetLocalIP()
|
||||
}
|
||||
|
||||
func (this *IMClusterTable) GetListenPort() int32 {
|
||||
return this.selfConf.GetListenPort()
|
||||
}
|
||||
@ -31,4 +37,9 @@ func (this *IMClusterTable) PostInit1() {
|
||||
if this.selfConf == nil {
|
||||
panic("imserver集群无法读取本服配置")
|
||||
}
|
||||
this.serverInfo = this.GetIp() + ":" + q5.ToString(this.GetListenPort())
|
||||
}
|
||||
|
||||
func (this *IMClusterTable) GetServerInfo() string {
|
||||
return this.serverInfo
|
||||
}
|
||||
|
@ -23,6 +23,22 @@ func (p *Player) GetAccountId() string {
|
||||
return p.accountId
|
||||
}
|
||||
|
||||
func (p *Player) GetSessionId() string {
|
||||
return p.sessionId
|
||||
}
|
||||
|
||||
func (p *Player) SendMsg(rspMsg proto.Message) {
|
||||
wspListener.sendProxyMsg(p.socket.Conn, p.socket.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
func (p *Player) ReBind(socket f5.WspCliConn) {
|
||||
if p.socket.IsValid() {
|
||||
delete(playerMgr.socketHash, p.socket)
|
||||
}
|
||||
p.socket = socket
|
||||
playerMgr.socketHash[p.socket] = p
|
||||
}
|
||||
|
||||
// CMSearchUser 搜索用户
|
||||
func (p *Player) CMSearchUser(hdr *f5.MsgHdr, msg *cs.CMSearchUser) {
|
||||
sinceId := msg.GetSinceId()
|
||||
@ -230,37 +246,57 @@ func (p *Player) CMRemoveBlacklist(hdr *f5.MsgHdr, msg *cs.CMRemoveBlacklist) {
|
||||
|
||||
// CMSendChatMsg 发送聊天消息
|
||||
func (p *Player) CMSendChatMsg(hdr *f5.MsgHdr, msg *cs.CMSendChatMsg) {
|
||||
chatChannel := *msg.ChatChannel
|
||||
if !IsValidChatChannel(chatChannel) {
|
||||
if !IsValidChatChannel(msg.GetChatChannel()) {
|
||||
return
|
||||
}
|
||||
switch chatChannel {
|
||||
|
||||
switch msg.GetChatChannel() {
|
||||
case kCCWorld:
|
||||
chatMgr.ProcWorldChat(p, msg)
|
||||
case kCCPrivate:
|
||||
chatMgr.ProcPrivateChat(p, msg)
|
||||
case kCCGuild:
|
||||
chatMgr.ProcGuildChat(p, msg)
|
||||
case kCCTeam:
|
||||
chatMgr.ProcTeamChat(p, msg)
|
||||
default:
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Player) SyncPrivateChatRedPoint() {
|
||||
//rspMsg := &cs.SMDeleteFriendShip{}
|
||||
msg := &cs.SMUpdatePrivateChatRedPointNotify{}
|
||||
chatMgr.FillSMUpdatePrivateChatRedPointNotify(p, msg)
|
||||
}
|
||||
|
||||
// CMReadMsgAndOpenChatNotify 读取聊天消息列表并且开启聊天通知
|
||||
func (p *Player) CMReadMsgAndOpenChatNotify(hdr *f5.MsgHdr, msg *cs.CMReadMsgAndOpenChatNotify) {
|
||||
chatChannel := *msg.CurrChannel
|
||||
if !IsValidChatChannel(chatChannel) {
|
||||
if !IsValidChatChannel(msg.GetCurrChannel()) {
|
||||
return
|
||||
}
|
||||
if chatChannel == kCCPrivate {
|
||||
p.chatChannel = int(msg.GetCurrChannel())
|
||||
if p.chatChannel == kCCPrivate {
|
||||
p.SyncPrivateChatRedPoint()
|
||||
}
|
||||
|
||||
// lastIds [{key:1, value:0}, {key:1, value:0}, ]
|
||||
for _, v := range msg.GetLastIds() {
|
||||
chatChannel := q5.ToInt32(v.GetKey())
|
||||
if !IsValidChatChannel(chatChannel) {
|
||||
continue
|
||||
}
|
||||
chatChannelLastId := uint64(v.GetValue())
|
||||
switch chatChannel {
|
||||
case kCCWorld:
|
||||
p.worldChannelLastId = chatChannelLastId
|
||||
chatMgr.SyncWorldChatMsg(p)
|
||||
case kCCGuild:
|
||||
p.guildChannelLastId = chatChannelLastId
|
||||
chatMgr.SyncGuildChatMsg(p)
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// CMSetCurrPrivateChatTarget 设置当前私聊目标
|
||||
@ -275,18 +311,14 @@ func (p *Player) MarkNewMsg() {
|
||||
p.SendMsg(rspMsg)
|
||||
}
|
||||
|
||||
func (p *Player) SendMsg(rspMsg proto.Message) {
|
||||
wspListener.sendProxyMsg(p.socket.Conn, p.socket.SocketHandle, rspMsg)
|
||||
}
|
||||
|
||||
func IsValidChatChannel(chatChannel int32) bool {
|
||||
return chatChannel > kCCBegin && chatChannel < kCCEnd
|
||||
}
|
||||
|
||||
// CMGuildInfo 我的公会信息
|
||||
// CMGuildInfo 公会信息
|
||||
func (p *Player) CMGuildInfo(hdr *f5.MsgHdr, msg *cs.CMGuildInfo) {
|
||||
rspMsg := new(cs.SMGuildInfo)
|
||||
guild := guildMgr.GetGuildByAccountId(p.accountId)
|
||||
guild := guildMgr.GetGuildByAccountId(msg.GetAccountId())
|
||||
if guild != nil {
|
||||
rspMsg.Guild = p.FillMFGuild(guild)
|
||||
}
|
||||
@ -577,8 +609,10 @@ func (p *Player) CMSetAvatar(hdr *f5.MsgHdr, msg *cs.CMSetAvatar) {
|
||||
// CMSetName 设置公会名称
|
||||
func (p *Player) CMSetName(hdr *f5.MsgHdr, msg *cs.CMSetName) {
|
||||
guildMgr.SetName(
|
||||
p.accountId,
|
||||
p,
|
||||
msg.Name,
|
||||
msg.GetItemId(),
|
||||
msg.GetItemNum(),
|
||||
func(errCode int32, errMsg string) {
|
||||
rspMsg := new(cs.SMSetName)
|
||||
if errCode != 0 {
|
||||
@ -765,6 +799,39 @@ func (p *Player) FillMFUser(profile *PlayerProfile) *cs.MFUser {
|
||||
return resUser
|
||||
}
|
||||
|
||||
// FillMFChatUser 填充聊天信息
|
||||
func (p *Player) FillMFChatUser() *cs.MFChatUser {
|
||||
accountId := p.accountId
|
||||
profile := cacheMgr.GetPlayerProfile(accountId)
|
||||
if profile == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var guildId int64 = 0
|
||||
var guildName = ""
|
||||
var guildLevel int32 = 0
|
||||
guild := guildMgr.GetGuildByAccountId(profile.AccountId)
|
||||
if guild != nil {
|
||||
guildId = guild.GuildId
|
||||
guildName = guild.Name
|
||||
guildLevel = guild.GetMemberLevel(accountId)
|
||||
}
|
||||
onlineStatus := playerMgr.GetOnlineStatus(profile.AccountId)
|
||||
|
||||
res := &cs.MFChatUser{
|
||||
AccountId: &profile.AccountId,
|
||||
Username: &profile.Username,
|
||||
Avatar: &profile.Avatar,
|
||||
AvatarHead: &profile.AvatarHead,
|
||||
GuildId: &guildId,
|
||||
GuildName: &guildName,
|
||||
GuildLevel: &guildLevel,
|
||||
OnlineStatus: &onlineStatus,
|
||||
LastLoginTime: &profile.LastLoginTime,
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func (p *Player) IncrPrivateChatLastId() uint64 {
|
||||
p.privateChatLastId++
|
||||
return p.privateChatLastId
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"f5"
|
||||
"fmt"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"mt"
|
||||
"q5"
|
||||
)
|
||||
@ -116,7 +117,7 @@ func (this *PlayerMgr) CMLoginResult(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.Htt
|
||||
player := Player{
|
||||
socket: hdr.GetSocket(),
|
||||
accountId: accountId,
|
||||
sessionId: accountId,
|
||||
sessionId: msg.GetSessionId(),
|
||||
}
|
||||
// Add to online user
|
||||
this.addPlayer(&player)
|
||||
@ -136,9 +137,11 @@ func (this *PlayerMgr) CMLoginResult(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.Htt
|
||||
cacheMgr.AddCacheProfile(1, playerProfile)
|
||||
friendMgr.LoadUser(accountId)
|
||||
|
||||
serverInfo := "192.168.100.39:2000"
|
||||
serverInfo := proto.String(mt.Table.IMCluster.GetServerInfo())
|
||||
f5.GetSysLog().Info("ServerInfo:%s", serverInfo)
|
||||
|
||||
rspMsg := &cs.SMLogin{}
|
||||
rspMsg.ServerInfo = &serverInfo
|
||||
rspMsg.ServerInfo = serverInfo
|
||||
rspMsg.AccountId = &resObj.Info.AccountID
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
@ -147,7 +150,7 @@ func (this *PlayerMgr) reportServerState(masterIp string, masterPort int32) {
|
||||
params := map[string]string{
|
||||
"node_id": q5.ToString(f5.GetApp().GetNodeId()),
|
||||
"instance_id": q5.ToString(f5.GetApp().GetInstanceId()),
|
||||
"ip": "192.168.100.164",
|
||||
"ip": mt.Table.IMCluster.GetIp(),
|
||||
"port": q5.ToString(mt.Table.IMCluster.GetListenPort()),
|
||||
"online_num": q5.ToString(0),
|
||||
"room_num": q5.ToString(0),
|
||||
@ -198,3 +201,22 @@ func (this *PlayerMgr) GetOnlineStatus(accountId string) int32 {
|
||||
}
|
||||
return OnlineStatusOff
|
||||
}
|
||||
|
||||
func (this *PlayerMgr) CMReconnect(hdr *f5.MsgHdr, msg *cs.CMReconnect) {
|
||||
hum := this.GetPlayerByAccountId(msg.GetAccountId())
|
||||
rspMsg := &cs.SMReconnect{}
|
||||
if hum == nil {
|
||||
rspMsg.Errcode = proto.Int32(ERR_CODE_RECONNECT_PLAYER_NO_EXISTS)
|
||||
rspMsg.Errmsg = proto.String("player no exists")
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
return
|
||||
}
|
||||
if hum.GetSessionId() != msg.GetSessionId() {
|
||||
rspMsg.Errcode = proto.Int32(ERR_CODE_RECONNECT_PLAYER_SESSION_ID_NO_VALID)
|
||||
rspMsg.Errmsg = proto.String("session_id no valid")
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
return
|
||||
}
|
||||
hum.ReBind(hdr.GetSocket())
|
||||
wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg)
|
||||
}
|
||||
|
@ -351,21 +351,35 @@ message MFChatMsg
|
||||
!!!不同的频道msg_uuid可能重复
|
||||
*/
|
||||
optional uint64 msg_uuid = 1;
|
||||
optional string sender = 2; //发送者
|
||||
optional string receiver = 3; //接收者
|
||||
optional MFChatUser sender = 2; //发送者
|
||||
optional MFChatUser receiver = 3; //接收者
|
||||
optional int32 chat_channel = 4; //聊天频道
|
||||
optional int32 msg_type = 5; //消息类型 0:文本消息(json) 1:自定义协议 (json) 2:纯文本(但是任会做屏蔽字替换)
|
||||
optional string msg_body = 6; //消息内容(json类型里的字段!开头的会做屏蔽替换)
|
||||
optional int64 send_time = 7; //消息发送时间
|
||||
}
|
||||
|
||||
// --- 公会 ---
|
||||
// 请求我的公会信息
|
||||
message CMGuildInfo
|
||||
{
|
||||
// 聊天用户
|
||||
message MFChatUser{
|
||||
optional string account_id = 1;
|
||||
optional string username = 2;
|
||||
optional int32 avatar = 3;
|
||||
optional int32 avatar_head = 4;
|
||||
optional int64 guild_id = 5;
|
||||
optional string guild_name = 6;
|
||||
optional int32 guild_level = 7;
|
||||
optional int32 online_status = 8;
|
||||
optional int32 last_login_time = 9;
|
||||
}
|
||||
|
||||
// 回复我的公会信息
|
||||
// --- 公会 ---
|
||||
// 请求公会信息
|
||||
message CMGuildInfo
|
||||
{
|
||||
optional string accountId = 1;
|
||||
}
|
||||
|
||||
// 回复公会信息
|
||||
message SMGuildInfo
|
||||
{
|
||||
optional int32 errcode = 1;
|
||||
@ -598,6 +612,8 @@ message MFGuildLog {
|
||||
message CMSetName
|
||||
{
|
||||
optional string name = 1;
|
||||
optional int32 item_id = 2;
|
||||
optional int32 item_num = 3;
|
||||
}
|
||||
|
||||
// 回复修改公会名称
|
||||
@ -673,4 +689,4 @@ message MFGuildMember {
|
||||
optional int32 last_login_time = 9;
|
||||
optional int32 level = 10;
|
||||
optional int32 star = 11;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user