添加公会相关实现
This commit is contained in:
parent
27dcc1835c
commit
81dda734a4
@ -31,7 +31,8 @@ enum NetHandler_e
|
|||||||
HID_Player,
|
HID_Player,
|
||||||
HID_GroupMgr,
|
HID_GroupMgr,
|
||||||
HID_IMConnMgr,
|
HID_IMConnMgr,
|
||||||
HID_SyncHelper
|
HID_SyncHelper,
|
||||||
|
HID_GuildMgr
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ReadPointFlag
|
enum ReadPointFlag
|
||||||
|
142
server/imserver/guild.cc
Normal file
142
server/imserver/guild.cc
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
#include "precompile.h"
|
||||||
|
|
||||||
|
#include <a8/timer.h>
|
||||||
|
|
||||||
|
#include "guild.h"
|
||||||
|
#include "cs_proto.pb.h"
|
||||||
|
#include "ss_proto.pb.h"
|
||||||
|
#include "dbengine.h"
|
||||||
|
#include "app.h"
|
||||||
|
|
||||||
|
void Guild::Init()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Guild::UnInit()
|
||||||
|
{
|
||||||
|
for (auto& pair : member_hash_) {
|
||||||
|
delete pair.second;
|
||||||
|
}
|
||||||
|
member_hash_.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
GuildMember* Guild::GetMember(const std::string& account_id)
|
||||||
|
{
|
||||||
|
auto itr = member_hash_.find(account_id);
|
||||||
|
return itr != member_hash_.end() ? itr->second : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Guild::IsFull()
|
||||||
|
{
|
||||||
|
return member_hash_.size() < 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
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()) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
member_hash_[member->account_id] = member;
|
||||||
|
|
||||||
|
MarkDirty();
|
||||||
|
if (dirty_timer_) {
|
||||||
|
a8::Timer::Instance()->ModifyTimer(dirty_timer_, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Guild::RemoveMember(const std::string& account_id)
|
||||||
|
{
|
||||||
|
GuildMember* member = GetMember(account_id);
|
||||||
|
if (member) {
|
||||||
|
member_hash_.erase(account_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
MarkDirty();
|
||||||
|
if (dirty_timer_) {
|
||||||
|
a8::Timer::Instance()->ModifyTimer(dirty_timer_, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Guild::MarkDirty()
|
||||||
|
{
|
||||||
|
if (!dirty_) {
|
||||||
|
dirty_ = true;
|
||||||
|
dirty_timer_ = a8::Timer::Instance()->
|
||||||
|
AddDeadLineTimerAndAttach(1000 * 60,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender((void*)this),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
Guild* guild = (Guild*)param.sender.GetUserData();
|
||||||
|
guild->SaveToDB();
|
||||||
|
},
|
||||||
|
&timer_attacher.timer_list_,
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
Guild* guild = (Guild*)param.sender.GetUserData();
|
||||||
|
guild->dirty_timer_ = nullptr;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Guild::FillGuildDB(ss::MFGuildDB& guild_dto)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Guild::SaveToDB()
|
||||||
|
{
|
||||||
|
ss::MFGuildDB guild_db;
|
||||||
|
FillGuildDB(guild_db);
|
||||||
|
std::string guild_data;
|
||||||
|
guild_db.SerializeToString(&guild_data);
|
||||||
|
|
||||||
|
auto on_ok =
|
||||||
|
[] (a8::XParams& param, const f8::DataSet* data_set)
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
auto on_error =
|
||||||
|
[] (a8::XParams& param, int error_code, const std::string& error_msg)
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(guild_id);
|
||||||
|
DBEngine::Instance()->
|
||||||
|
ExecAsyncScript(
|
||||||
|
conn_info,
|
||||||
|
"INSERT `guild`(guild_id, guild_name, owner_id, creator_id, guild_data "
|
||||||
|
" createtime, modifytime) "
|
||||||
|
"VALUES(%d, '%s', %d, %d, '%s', %d, %d) "
|
||||||
|
"ON DUPLICATE KEY UPDATE guild_name='%s', owner_id=%d, creator_id=%d, "
|
||||||
|
" guild_data='%s', modifytime=%d;",
|
||||||
|
{
|
||||||
|
guild_id,
|
||||||
|
guild_name,
|
||||||
|
owner_id,
|
||||||
|
creator_id,
|
||||||
|
guild_data,
|
||||||
|
App::Instance()->nowtime,
|
||||||
|
App::Instance()->nowtime,
|
||||||
|
|
||||||
|
guild_name,
|
||||||
|
owner_id,
|
||||||
|
creator_id,
|
||||||
|
guild_data,
|
||||||
|
App::Instance()->nowtime
|
||||||
|
},
|
||||||
|
a8::XParams(),
|
||||||
|
on_ok,
|
||||||
|
on_error,
|
||||||
|
guild_id
|
||||||
|
);
|
||||||
|
}
|
50
server/imserver/guild.h
Normal file
50
server/imserver/guild.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <a8/timer_attacher.h>
|
||||||
|
|
||||||
|
struct GuildMember
|
||||||
|
{
|
||||||
|
std::string account_id;
|
||||||
|
std::string nickname;
|
||||||
|
std::string avatar_url;
|
||||||
|
int sex = 0;
|
||||||
|
int online = 0;
|
||||||
|
long long guild_id = 0;
|
||||||
|
int data_version1 = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace ss
|
||||||
|
{
|
||||||
|
class MFGuildDB;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct timer_list;
|
||||||
|
class Guild
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
long long guild_id = 0;
|
||||||
|
std::string guild_name;
|
||||||
|
std::string owner_id;
|
||||||
|
std::string creator_id;
|
||||||
|
int createtime = 0;
|
||||||
|
a8::TimerAttacher timer_attacher;
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
void UnInit();
|
||||||
|
|
||||||
|
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);
|
||||||
|
void MarkDirty();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void FillGuildDB(ss::MFGuildDB& guild_dto);
|
||||||
|
void SaveToDB();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool dirty_ = false;
|
||||||
|
timer_list* dirty_timer_ = nullptr;
|
||||||
|
std::map<std::string, GuildMember*> member_hash_;
|
||||||
|
};
|
237
server/imserver/guildmgr.cc
Normal file
237
server/imserver/guildmgr.cc
Normal file
@ -0,0 +1,237 @@
|
|||||||
|
#include "precompile.h"
|
||||||
|
|
||||||
|
#include "guild.h"
|
||||||
|
#include "guildmgr.h"
|
||||||
|
#include "cs_msgid.pb.h"
|
||||||
|
#include "cs_proto.pb.h"
|
||||||
|
#include "ss_proto.pb.h"
|
||||||
|
#include "MSConnMgr.h"
|
||||||
|
|
||||||
|
void GuildMgr::Init()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::UnInit()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::_SS_MS_LoadGuild(f8::MsgHdr& hdr, const ss::SS_MS_LoadGuild& msg)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::_SS_MS_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGuildCMMsg& msg)
|
||||||
|
{
|
||||||
|
switch (hdr.msgid) {
|
||||||
|
case cs::CMMessageId_e::_CMGuildCreate:
|
||||||
|
{
|
||||||
|
cs::CMGuildCreate cmmsg;
|
||||||
|
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
|
||||||
|
_CMGuildCreate(msg.context(), cmmsg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case cs::CMMessageId_e::_CMGuildJoin:
|
||||||
|
{
|
||||||
|
cs::CMGuildJoin cmmsg;
|
||||||
|
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
|
||||||
|
_CMGuildJoin(msg.context(), cmmsg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case cs::CMMessageId_e::_CMGuildAgree:
|
||||||
|
{
|
||||||
|
cs::CMGuildAgree cmmsg;
|
||||||
|
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
|
||||||
|
_CMGuildAgree(msg.context(), cmmsg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case cs::CMMessageId_e::_CMGuildKick:
|
||||||
|
{
|
||||||
|
cs::CMGuildKick cmmsg;
|
||||||
|
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
|
||||||
|
_CMGuildKick(msg.context(), cmmsg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case cs::CMMessageId_e::_CMGuildQuit:
|
||||||
|
{
|
||||||
|
cs::CMGuildQuit cmmsg;
|
||||||
|
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
|
||||||
|
_CMGuildQuit(msg.context(), cmmsg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case cs::CMMessageId_e::_CMGuildDismiss:
|
||||||
|
{
|
||||||
|
cs::CMGuildDismiss cmmsg;
|
||||||
|
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
|
||||||
|
_CMGuildDismiss(msg.context(), cmmsg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case cs::CMMessageId_e::_CMGuildRename:
|
||||||
|
{
|
||||||
|
cs::CMGuildRename cmmsg;
|
||||||
|
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
|
||||||
|
_CMGuildRename(msg.context(), cmmsg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::_CMGuildCreate(const ss::MFIMMsgConext& context, const cs::CMGuildCreate& msg)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
Guild* guild = GetGuild(context.guild_id());
|
||||||
|
if (guild) {
|
||||||
|
cs::SMGuildCreate respmsg;
|
||||||
|
respmsg.set_errcode(1);
|
||||||
|
respmsg.set_errmsg("群id已经存在");
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::_CMGuildJoin(const ss::MFIMMsgConext& context, const cs::CMGuildJoin& msg)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
Guild* guild = GetGuild(msg.guild_id());
|
||||||
|
if (!guild) {
|
||||||
|
cs::SMGuildJoin respmsg;
|
||||||
|
respmsg.set_errcode(1);
|
||||||
|
respmsg.set_errmsg("群id已经存在");
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GuildMember* member = guild->GetMember(context.account_id());
|
||||||
|
if (member) {
|
||||||
|
cs::SMGuildJoin respmsg;
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (guild->IsFull()) {
|
||||||
|
cs::SMGuildJoin respmsg;
|
||||||
|
respmsg.set_errcode(2);
|
||||||
|
respmsg.set_errmsg("群已满");
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
member = new GuildMember();
|
||||||
|
member->account_id = context.account_id();
|
||||||
|
member->nickname = context.nickname();
|
||||||
|
member->avatar_url = context.avatar_url();
|
||||||
|
member->sex = context.sex();
|
||||||
|
member->online = 1;
|
||||||
|
member->guild_id = guild->guild_id;
|
||||||
|
member->data_version1 = context.base_data_version();
|
||||||
|
guild->AddMember(member);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::_CMGuildAgree(const ss::MFIMMsgConext& context, const cs::CMGuildAgree& msg)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
Guild* guild = GetGuild(context.guild_id());
|
||||||
|
if (!guild) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::_CMGuildKick(const ss::MFIMMsgConext& context, const cs::CMGuildKick& msg)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
Guild* guild = GetGuild(context.guild_id());
|
||||||
|
if (!guild) {
|
||||||
|
cs::SMGuildKick respmsg;
|
||||||
|
respmsg.set_errcode(1);
|
||||||
|
respmsg.set_errmsg("群id错误");
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!guild->GetMember(msg.account_id())) {
|
||||||
|
cs::SMGuildKick respmsg;
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
guild->RemoveMember(msg.account_id());
|
||||||
|
cs::SMGuildKick respmsg;
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::_CMGuildQuit(const ss::MFIMMsgConext& context, const cs::CMGuildQuit& msg)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
Guild* guild = GetGuild(context.guild_id());
|
||||||
|
if (!guild) {
|
||||||
|
cs::SMGuildQuit respmsg;
|
||||||
|
respmsg.set_errcode(1);
|
||||||
|
respmsg.set_errmsg("群id错误");
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!guild->GetMember(context.account_id())) {
|
||||||
|
cs::SMGuildQuit respmsg;
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
guild->RemoveMember(context.account_id());
|
||||||
|
cs::SMGuildQuit respmsg;
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::_CMGuildDismiss(const ss::MFIMMsgConext& context, const cs::CMGuildDismiss& msg)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
Guild* guild = GetGuild(context.guild_id());
|
||||||
|
if (!guild) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::_CMGuildRename(const ss::MFIMMsgConext& context, const cs::CMGuildRename& msg)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
Guild* guild = GetGuild(context.guild_id());
|
||||||
|
if (!guild) {
|
||||||
|
cs::SMGuildRename respmsg;
|
||||||
|
respmsg.set_errcode(1);
|
||||||
|
respmsg.set_errmsg("群id错误");
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GuildMember* member = guild->GetMember(context.account_id());
|
||||||
|
if (!member) {
|
||||||
|
cs::SMGuildRename respmsg;
|
||||||
|
respmsg.set_errcode(2);
|
||||||
|
respmsg.set_errmsg("没有权限");
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
guild->RemoveMember(msg.new_guild_name());
|
||||||
|
cs::SMGuildRename respmsg;
|
||||||
|
ForwardGuildSMMsg(context, respmsg);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
Guild* GuildMgr::GetGuild(long long guild_id)
|
||||||
|
{
|
||||||
|
auto itr = id_hash_.find(guild_id);
|
||||||
|
return itr != id_hash_.end() ? itr->second : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GuildMgr::ForwardGuildSMMsg(const ss::MFIMMsgConext& context,
|
||||||
|
const ::google::protobuf::Message& smmsg)
|
||||||
|
{
|
||||||
|
ss::SS_MS_ForwardGuildSMMsg msg;
|
||||||
|
*msg.mutable_context() = context;
|
||||||
|
smmsg.SerializeToString(msg.mutable_payload());
|
||||||
|
MSConnMgr::Instance()->SendMsg(msg, 0);
|
||||||
|
}
|
61
server/imserver/guildmgr.h
Normal file
61
server/imserver/guildmgr.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace cs
|
||||||
|
{
|
||||||
|
class CMGuildCreate;
|
||||||
|
class CMGuildJoin;
|
||||||
|
class CMGuildAgree;
|
||||||
|
class CMGuildKick;
|
||||||
|
class CMGuildQuit;
|
||||||
|
class CMGuildDismiss;
|
||||||
|
class CMGuildRename;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ss
|
||||||
|
{
|
||||||
|
class MFIMMsgConext;
|
||||||
|
class SS_MS_LoadGuild;
|
||||||
|
class SS_MS_ForwardGuildCMMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace google
|
||||||
|
{
|
||||||
|
namespace protobuf
|
||||||
|
{
|
||||||
|
class Message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Guild;
|
||||||
|
class GuildMgr : public a8::Singleton<GuildMgr>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum { HID = HID_GuildMgr };
|
||||||
|
|
||||||
|
private:
|
||||||
|
GuildMgr() {};
|
||||||
|
friend class a8::Singleton<GuildMgr>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void Init();
|
||||||
|
void UnInit();
|
||||||
|
|
||||||
|
void _SS_MS_LoadGuild(f8::MsgHdr& hdr, const ss::SS_MS_LoadGuild& msg);
|
||||||
|
void _SS_MS_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGuildCMMsg& msg);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _CMGuildCreate(const ss::MFIMMsgConext& context, const cs::CMGuildCreate& msg);
|
||||||
|
void _CMGuildJoin(const ss::MFIMMsgConext& context, const cs::CMGuildJoin& msg);
|
||||||
|
void _CMGuildAgree(const ss::MFIMMsgConext& context, const cs::CMGuildAgree& msg);
|
||||||
|
void _CMGuildKick(const ss::MFIMMsgConext& context, const cs::CMGuildKick& msg);
|
||||||
|
void _CMGuildQuit(const ss::MFIMMsgConext& context, const cs::CMGuildQuit& msg);
|
||||||
|
void _CMGuildDismiss(const ss::MFIMMsgConext& context, const cs::CMGuildDismiss& msg);
|
||||||
|
void _CMGuildRename(const ss::MFIMMsgConext& context, const cs::CMGuildRename& msg);
|
||||||
|
|
||||||
|
Guild* GetGuild(long long group_id);
|
||||||
|
void ForwardGuildSMMsg(const ss::MFIMMsgConext& context,
|
||||||
|
const ::google::protobuf::Message& smmsg);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::map<long long, Guild*> id_hash_;
|
||||||
|
};
|
@ -48,6 +48,16 @@ message MFGroupDB
|
|||||||
repeated MFGroupMemberDB members = 1;
|
repeated MFGroupMemberDB members = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message MFGuildMemberDB
|
||||||
|
{
|
||||||
|
optional MFBaseUserDataDB base_data = 1; //基础数据
|
||||||
|
}
|
||||||
|
|
||||||
|
message MFGuildDB
|
||||||
|
{
|
||||||
|
repeated MFGuildMemberDB members = 1;
|
||||||
|
}
|
||||||
|
|
||||||
message MFFriendDB
|
message MFFriendDB
|
||||||
{
|
{
|
||||||
optional MFBaseUserDataDB base_data = 1; //基础数据
|
optional MFBaseUserDataDB base_data = 1; //基础数据
|
||||||
@ -141,6 +151,23 @@ message SS_MS_LoadGroup
|
|||||||
optional int64 group_id = 1;
|
optional int64 group_id = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message SS_MS_ForwardGuildCMMsg
|
||||||
|
{
|
||||||
|
optional MFIMMsgConext context = 1;
|
||||||
|
optional bytes payload = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SS_MS_ForwardGuildSMMsg
|
||||||
|
{
|
||||||
|
optional MFIMMsgConext context = 1;
|
||||||
|
optional bytes payload = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SS_MS_LoadGuild
|
||||||
|
{
|
||||||
|
optional int64 guild_id = 1;
|
||||||
|
}
|
||||||
|
|
||||||
message SS_IM_ReportServerInfo
|
message SS_IM_ReportServerInfo
|
||||||
{
|
{
|
||||||
optional int32 instance_id = 1;
|
optional int32 instance_id = 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user