diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 6a101a0..ac8234a 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -37,12 +37,6 @@ bool Guild::IsFull() return member_hash_.size() < 50; } -void Guild::Rename(const std::string& new_guild_name) -{ - guild_name = new_guild_name; - MarkDirty(); -} - void Guild::AddMember(GuildMember* member) { if (member_hash_.find(member->account_id) != member_hash_.end()) { @@ -143,6 +137,7 @@ void Guild::_CMGuildRename(int socket_handle, const ss::MFIMMsgConext& context, guild_name = msg.new_name(); cs::SMGuildRename respmsg; GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle, context, respmsg); + MarkDirty(); } void Guild::_CMGuildMemberList(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildMemberList& msg) @@ -153,12 +148,38 @@ void Guild::_CMGuildMemberList(int socket_handle, const ss::MFIMMsgConext& conte respmsg.mutable_paging()->set_page_size(10); } AdjustPaging(respmsg.mutable_paging(), sorted_members_.size()); + for (size_t i = respmsg.paging().curr_page() * respmsg.paging().page_size(); + i < sorted_members_.size(); + ++i) { + if (respmsg.member_list().size() >= respmsg.paging().page_size()) { + break; + } + auto p = respmsg.add_member_list(); + TypeConvert::Convert(*sorted_members_[i], *p); + } GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle, context, respmsg); } void Guild::_CMGuildLog(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildLog& msg) { - + cs::SMGuildLog respmsg; + *respmsg.mutable_paging() = msg.paging(); + if (respmsg.paging().page_size() <= 0) { + respmsg.mutable_paging()->set_page_size(10); + } + AdjustPaging(respmsg.mutable_paging(), logdb_->logs().size()); + for (int i = respmsg.paging().curr_page() * respmsg.paging().page_size(); + i < logdb_->logs().size(); + ++i) { + #if 0 + if (respmsg.member_list().size() >= respmsg.paging().page_size()) { + break; + } + auto p = respmsg.add_member_list(); + TypeConvert::Convert(*sorted_members_[i], *p); + #endif + } + GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle, context, respmsg); } void Guild::FillGuildBasic(cs::MFGuildBasic* guild_basic) diff --git a/server/imserver/guild.h b/server/imserver/guild.h index 3d70767..40fbf84 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -67,7 +67,6 @@ class Guild private: bool IsFull(); - void Rename(const std::string& new_guild_name); GuildMember* GetMember(const std::string& account_id); void AddMember(GuildMember* member); void RemoveMember(const std::string& account_id); @@ -82,6 +81,6 @@ private: bool dirty_ = false; timer_list* dirty_timer_ = nullptr; std::map member_hash_; - std::list sorted_members_; + std::vector sorted_members_; ss::MFGuildLogDB* logdb_ = nullptr; }; diff --git a/server/imserver/typeconvert.cc b/server/imserver/typeconvert.cc index a7af6e6..8612b42 100644 --- a/server/imserver/typeconvert.cc +++ b/server/imserver/typeconvert.cc @@ -68,6 +68,20 @@ void TypeConvert::Convert(const GuildMember& member, ss::MFBaseUserDataDB& base_ base_data_pb.set_base_data_version(member.data_version1); } +void TypeConvert::Convert(const GuildMember& member, cs::MFBaseUserData& base_data_pb) +{ + base_data_pb.set_account_id(member.account_id); + base_data_pb.set_nickname(member.nickname); + base_data_pb.set_avatar_url(member.avatar_url); + base_data_pb.set_sex(member.sex); + base_data_pb.set_last_login_time(member.last_login_time); + base_data_pb.set_guild_job(member.guild_job); + base_data_pb.set_user_value1(member.user_value1); + base_data_pb.set_user_value2(member.user_value2); + base_data_pb.set_user_value3(member.user_value3); + base_data_pb.set_base_data_version(member.data_version1); +} + void TypeConvert::Convert(const ss::MFBaseUserDataDB& base_data_pb, GuildMember& member) { member.account_id = base_data_pb.account_id(); diff --git a/server/imserver/typeconvert.h b/server/imserver/typeconvert.h index d9e3e57..3cd7946 100644 --- a/server/imserver/typeconvert.h +++ b/server/imserver/typeconvert.h @@ -23,6 +23,7 @@ class TypeConvert static void Convert(const GuildMember& member, ss::MFBaseUserDataDB& base_data_pb); static void Convert(const ss::MFBaseUserDataDB& base_data_pb, GuildMember& member); + static void Convert(const GuildMember& member, cs::MFBaseUserData& base_data_pb); static void Convert(const cs::MFBaseUserData& base_data_pb, BaseUserData& base_data); static void Convert(const BaseUserData& base_data, cs::MFBaseUserData& base_data_pb); diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 8c9fc32..e6edae6 100644 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -39,6 +39,8 @@ message MFBaseUserData optional int32 sex = 4; //性别 1:男 2:女 0:未知 optional int32 last_login_time = 5; //最后登录时间 optional int64 guild_id = 6; //工会id + optional string guild_name = 7; //公会名称 + optional int32 guild_job = 8; //公会职位 optional int64 user_value1 = 50; //用户字段1 optional int64 user_value2 = 51; //用户字段2 @@ -466,17 +468,19 @@ message SMGuildMemberList optional int32 errcode = 1; //错误码 optional string errmsg = 2; //错误信息 optional MFPaging paging = 3; //分页信息 - repeated MFGuildBasic guild_list = 4; //公会列表 + repeated MFBaseUserData member_list = 4; //公会成员列表 } //公会动态(日志) message CMGuildLog { + optional MFPaging paging = 1; //分页信息 } message SMGuildLog { optional int32 errcode = 1; //错误码 optional string errmsg = 2; //错误信息 + optional MFPaging paging = 3; //分页信息 /* values[0]: account_id values[1]: 角色名 @@ -484,7 +488,7 @@ message SMGuildLog values[3]: 行为时间(unix时间戳) values[4]: 行为 */ - repeated MFStringTuple logs = 3; + repeated MFStringTuple logs = 4; } //发送聊天消息