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