1
This commit is contained in:
parent
951676bcd8
commit
d7c6dcde53
@ -18,8 +18,8 @@ enum GuildStatus_e
|
||||
enum GuildJob_e
|
||||
{
|
||||
kGuildMember = 0,
|
||||
kGuildOwner = 1,
|
||||
kGuildAdmin = 2,
|
||||
kGuildOwner = 1, //只能1个
|
||||
kGuildAdmin = 2, //只能1个
|
||||
kGuildElite = 3,
|
||||
kGuildJobMax
|
||||
};
|
||||
|
@ -119,18 +119,67 @@ void Guild::MarkDirty()
|
||||
}
|
||||
}
|
||||
|
||||
void Guild::Deserialize(const std::string& guild_data, const std::string& guild_log)
|
||||
{
|
||||
logdb_->ParseFromString(guild_log);
|
||||
void Guild::Deserialize(const std::string& guild_data,
|
||||
const std::string& guild_members,
|
||||
const std::string& guild_log)
|
||||
|
||||
ss::MFGuildDB guilddb;
|
||||
guilddb.ParseFromString(guild_data);
|
||||
for (auto& member_pb : guilddb.members()) {
|
||||
GuildMember* member = new GuildMember;
|
||||
TypeConvert::Convert(member_pb.base_data(), *member);
|
||||
member_hash_[member->account_id] = member;
|
||||
{
|
||||
{
|
||||
logdb_->ParseFromString(guild_log);
|
||||
}
|
||||
|
||||
{
|
||||
ss::MFGuildDB guilddb;
|
||||
guilddb.ParseFromString(guild_data);
|
||||
for (auto& member_pb : guilddb.members()) {
|
||||
GuildMember* member = new GuildMember;
|
||||
TypeConvert::Convert(member_pb.base_data(), *member);
|
||||
member_hash_[member->account_id] = member;
|
||||
}
|
||||
GenSortedMembers();
|
||||
}
|
||||
|
||||
{
|
||||
a8::XObject xobj;
|
||||
xobj.ReadFromJsonString(guild_members);
|
||||
if (xobj.GetType() == a8::XOT_ARRAY) {
|
||||
for (int i = 0; i < xobj.Size(); ++i) {
|
||||
std::shared_ptr<a8::XObject> item = xobj.At(i);
|
||||
if (item && item->GetType() == a8::XOT_OBJECT) {
|
||||
if (item->HasKey("account_id") && item->At("account_id")->GetType() == a8::XOT_SIMPLE &&
|
||||
item->HasKey("guild_job") && item->At("guild_job")->GetType() == a8::XOT_SIMPLE
|
||||
) {
|
||||
std::string account_id = item->At("account_id")->AsXValue().GetString();
|
||||
int job = item->At("guild_job")->AsXValue();
|
||||
if (GetMember(account_id) && IsValidGuildJob(job)) {
|
||||
if (job == kGuildOwner) {
|
||||
continue;
|
||||
}
|
||||
if (job == kGuildAdmin && GetJobMemberNum(job) > 0) {
|
||||
continue;
|
||||
}
|
||||
member_job_hash_[account_id] = job;
|
||||
std::set<std::string>* members = GetJobMembers(job);
|
||||
if (!members) {
|
||||
members = new std::set<std::string>();
|
||||
job_hash_[job] = members;
|
||||
}
|
||||
members->insert(account_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}//end for
|
||||
}
|
||||
{
|
||||
member_job_hash_[owner_id_] = kGuildOwner;
|
||||
std::set<std::string>* members = GetJobMembers(kGuildOwner);
|
||||
if (!members) {
|
||||
members = new std::set<std::string>();
|
||||
job_hash_[kGuildOwner] = members;
|
||||
}
|
||||
members->insert(owner_id_);
|
||||
}
|
||||
}
|
||||
GenSortedMembers();
|
||||
}
|
||||
|
||||
void Guild::_CMGuildInfo(f8::MsgHdr& hdr, const cs::CMGuildInfo& msg)
|
||||
@ -500,12 +549,18 @@ int Guild::GetMemberJob(const std::string& account_id)
|
||||
|
||||
std::set<std::string>* Guild::GetJobMembers(int job)
|
||||
{
|
||||
if (job < 0 || job > (int)job_hash_.size()) {
|
||||
if (!IsValidGuildJob(job)) {
|
||||
return nullptr;
|
||||
}
|
||||
return job_hash_[job];
|
||||
}
|
||||
|
||||
int Guild::GetJobMemberNum(int job)
|
||||
{
|
||||
std::set<std::string>* members = GetJobMembers(job);
|
||||
return members ? members->size() : 0;
|
||||
}
|
||||
|
||||
void Guild::FillGuildBasic(cs::MFGuildBasic* guild_basic)
|
||||
{
|
||||
guild_basic->set_guild_id(guild_id_);
|
||||
@ -537,7 +592,6 @@ void Guild::SerializeMembers(std::string& guild_members)
|
||||
for (auto& pair : member_hash_) {
|
||||
a8::MutableXObject* member_xobj = a8::MutableXObject::NewObject();
|
||||
member_xobj->SetVal("account_id", pair.second->account_id);
|
||||
member_xobj->SetVal("nickname", pair.second->nickname);
|
||||
member_xobj->SetVal("guild_job", GetMemberJob(pair.second->account_id));
|
||||
members_xobj->Push(*member_xobj);
|
||||
delete member_xobj;
|
||||
@ -580,7 +634,8 @@ void Guild::SaveToDB()
|
||||
" guild_apply_num=%d, guild_members='%s', guild_notice='%s', guild_declaration='%s', "
|
||||
" guild_log='%s', owner_id='%s', owner_name='%s', owner_avatar_url='%s', "
|
||||
" creator_id='%s', creator_name='%s', creator_avatar_url='%s', guild_data='%s', "
|
||||
" guild_status='%d', modifytime=%d "
|
||||
" guild_status='%d', join_unlimited=%d, join_cond1=%d, join_cond1=%d, guild_member_num=%d, "
|
||||
" modifytime=%d "
|
||||
"WHERE guild_id=%d;",
|
||||
{
|
||||
guild_name_,
|
||||
@ -600,6 +655,10 @@ void Guild::SaveToDB()
|
||||
creator_avatar_url_,
|
||||
guild_data,
|
||||
guild_status_,
|
||||
join_unlimited_,
|
||||
join_cond1_,
|
||||
join_cond2_,
|
||||
member_hash_.size(),
|
||||
App::Instance()->nowtime,
|
||||
guild_id_
|
||||
},
|
||||
@ -728,8 +787,7 @@ Guild* Guild::CreateGuild(int gameid,
|
||||
guild->join_cond1_ = join_cond1;
|
||||
guild->join_cond2_ = join_cond2;
|
||||
guild->createtime_ = createtime;
|
||||
//guild_members
|
||||
guild->Deserialize(guild_data, guild_log);
|
||||
guild->Deserialize(guild_data, guild_members, guild_log);
|
||||
return guild;
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,7 @@ public:
|
||||
long long GuildId() { return guild_id_; }
|
||||
int GetMemberJob(const std::string& account_id);
|
||||
std::set<std::string>* GetJobMembers(int job);
|
||||
int GetJobMemberNum(int job);
|
||||
|
||||
private:
|
||||
bool IsFull();
|
||||
@ -51,7 +52,9 @@ private:
|
||||
void FillApplyList(const std::string& account_id, cs::MFPaging& paging, cs::SMGuildApplyList& respmsg);
|
||||
void ClearApplyBySenderId(const std::string& sender_id);
|
||||
void ClearApplyByIdx(long long idx);
|
||||
void Deserialize(const std::string& guild_data, const std::string& guild_log);
|
||||
void Deserialize(const std::string& guild_data,
|
||||
const std::string& guild_members,
|
||||
const std::string& guild_log);
|
||||
void SendErrorMsg(int sokcet_handle, const ss::MFIMMsgConext& context, const std::string& errmsg);
|
||||
|
||||
private:
|
||||
|
@ -22,3 +22,8 @@ void AdjustPaging(cs::MFPaging* paging, int total_count)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool IsValidGuildJob(int job)
|
||||
{
|
||||
return job >= kGuildMember && job < kGuildJobMax;
|
||||
}
|
||||
|
@ -6,3 +6,4 @@ namespace cs
|
||||
}
|
||||
|
||||
void AdjustPaging(cs::MFPaging* paging, int total_count);
|
||||
bool IsValidGuildJob(int job);
|
||||
|
@ -55,10 +55,10 @@ void GuildMgr::__GuildCreate(f8::JsonHttpRequest* request)
|
||||
conn,
|
||||
"INSERT INTO `guild`(gameid, guild_id, guild_name, guild_lv, guild_exp, guild_badge, "
|
||||
" guild_apply_num, guild_notice, guild_declaration, guild_log, owner_id, "
|
||||
" owner_name, owner_avatar_url, creator_id, creator_name, creator_avatar_url, "
|
||||
" owner_name, owner_avatar_url, creator_id, creator_name, creator_avatar_url, guild_member_num"
|
||||
" guild_data, guild_status, join_unlimited, join_cond1, join_cond2, createtime, modifytime)"
|
||||
"VALUES(%d, %d, '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', "
|
||||
" '%s', '%s', '%s', '%s', '%s', "
|
||||
" '%s', '%s', '%s', '%s', '%s', 1, "
|
||||
" '%s', %d, %d, %d, %d, %d, %d);",
|
||||
{
|
||||
guild->_gameid(),
|
||||
|
@ -24,7 +24,7 @@ message MFStringTuple
|
||||
//分页信息
|
||||
message MFPaging
|
||||
{
|
||||
optional int64 curr_page = 1; //当前页(第一页是0)
|
||||
optional int32 curr_page = 1; //当前页(第一页是0)
|
||||
optional int32 page_size = 2; //每页记录数
|
||||
optional int32 _total_page = 3; //总页数(服务器填充该字段)
|
||||
optional int32 _total_count = 4; //总记录数(服务器填充该字段)
|
||||
|
@ -97,6 +97,7 @@ CREATE TABLE `guild` (
|
||||
`guild_badge` int(11) NOT NULL DEFAULT '0' COMMENT '公会徽章',
|
||||
`guild_apply_num` int(11) NOT NULL DEFAULT '0' COMMENT '申请人数',
|
||||
`guild_members` blob COMMENT '公会管理员',
|
||||
`guild_member_num` int(11) NOT NULL DEFAULT '0' COMMENT '公会成员数量',
|
||||
`guild_notice` tinyblob COMMENT '公会公告',
|
||||
`guild_declaration` tinyblob COMMENT '公会宣言',
|
||||
`guild_log` mediumblob COMMENT '公会日志',
|
||||
|
Loading…
x
Reference in New Issue
Block a user