1
This commit is contained in:
parent
3142003862
commit
9c71885dab
@ -1,6 +1,7 @@
|
||||
#include "precompile.h"
|
||||
|
||||
#include <a8/timer.h>
|
||||
#include <a8/openssl.h>
|
||||
#include <a8/mutable_xobject.h>
|
||||
|
||||
#include "guild.h"
|
||||
@ -272,21 +273,6 @@ void Guild::_CMGuildAgree(f8::MsgHdr& hdr, const cs::CMGuildAgree& msg)
|
||||
ss::SS_IM_ForwardGuildCMMsg *forward_msg = (ss::SS_IM_ForwardGuildCMMsg*)hdr.user_data;
|
||||
|
||||
cs::SMGuildAgree respmsg;
|
||||
GuildMember* member = GetMember(msg.apply().base_data().account_id());
|
||||
if (member) {
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdateOnlyOnline(this, member, kGuildUpdateReasonAgree);
|
||||
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
||||
forward_msg->context(),
|
||||
respmsg);
|
||||
DBHelper::Instance()->SetGuildApplyStatus
|
||||
(
|
||||
msg.apply().base_data().account_id(),
|
||||
guild_id_,
|
||||
kGuildApplyAgree
|
||||
);
|
||||
ClearApplyBySenderId(msg.apply().base_data().account_id());
|
||||
return;
|
||||
}
|
||||
if (IsFull()) {
|
||||
SendErrorMsg(hdr.socket_handle, forward_msg->context(), "公会人数已达上限");
|
||||
respmsg.set_errcode(1);
|
||||
@ -318,25 +304,78 @@ void Guild::_CMGuildAgree(f8::MsgHdr& hdr, const cs::CMGuildAgree& msg)
|
||||
respmsg);
|
||||
return;
|
||||
}
|
||||
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
||||
forward_msg->context(),
|
||||
respmsg);
|
||||
|
||||
member = new GuildMember();
|
||||
TypeConvert::Convert(msg.apply().base_data(), *member);
|
||||
AddMember(member);
|
||||
member_job_hash_[member->account_id] = kGuildMember;
|
||||
std::set<std::string>* members = GetJobMembers(kGuildMember);
|
||||
members->insert(member->account_id);
|
||||
ss::SS_IM_ForwardGuildCMMsg *forward_msg_copy = new ss::SS_IM_ForwardGuildCMMsg;
|
||||
*forward_msg_copy = *forward_msg;
|
||||
cs::CMGuildAgree* msg_copy = new cs::CMGuildAgree;
|
||||
*msg_copy = msg;
|
||||
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonAgree);
|
||||
DBHelper::Instance()->SetGuildApplyStatus
|
||||
unsigned int crc32_code = a8::openssl::Crc32
|
||||
(
|
||||
msg.apply().base_data().account_id(),
|
||||
guild_id_,
|
||||
kGuildApplyAgree
|
||||
(unsigned char*)msg.apply().base_data().account_id().data(),
|
||||
msg.apply().base_data().account_id().size()
|
||||
);
|
||||
a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(crc32_code);
|
||||
DBEngine::Instance()->ExecAsyncQuery
|
||||
(
|
||||
conn_info,
|
||||
"SELECT guild_id, guild_job WHERE account_id='%s' AND guild_id != 0;",
|
||||
{
|
||||
msg.apply().base_data().account_id()
|
||||
},
|
||||
a8::XParams()
|
||||
.SetSender(guild_id_)
|
||||
.SetParam1(forward_msg_copy)
|
||||
.SetParam2(hdr.socket_handle)
|
||||
.SetParam3(msg_copy),
|
||||
[] (a8::XParams& param, const f8::DataSet* data_set)
|
||||
{
|
||||
ss::SS_IM_ForwardGuildCMMsg *forward_msg_copy = (ss::SS_IM_ForwardGuildCMMsg*)param.param1.GetUserData();
|
||||
cs::CMGuildAgree* msg_copy = (cs::CMGuildAgree*)param.param3.GetUserData();
|
||||
|
||||
Guild* guild = GuildMgr::Instance()->GetGuild(param.sender);
|
||||
if (guild) {
|
||||
if (!data_set || data_set->empty()) {
|
||||
guild->GuildAgreeCb(param.param2,
|
||||
forward_msg_copy->context(),
|
||||
*msg_copy);
|
||||
} else if (data_set && !data_set->empty()) {
|
||||
const auto& row = (*data_set)[0];
|
||||
long long guild_id = a8::XValue(row[0]);
|
||||
if (guild_id == guild->GuildId()) {
|
||||
cs::SMGuildAgree respmsg;
|
||||
GuildMgr::Instance()->ForwardGuildSMMsg(param.param2,
|
||||
forward_msg_copy->context(),
|
||||
respmsg);
|
||||
DBHelper::Instance()->SetGuildApplyStatus
|
||||
(
|
||||
msg_copy->apply().base_data().account_id(),
|
||||
guild->GuildId(),
|
||||
kGuildApplyAgree
|
||||
);
|
||||
guild->ClearApplyBySenderId(msg_copy->apply().base_data().account_id());
|
||||
} else {
|
||||
guild->SendErrorMsg(param.param2, forward_msg_copy->context(), "对方已经有公会");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete msg_copy;
|
||||
delete forward_msg_copy;
|
||||
},
|
||||
[] (a8::XParams& param, int error_code, const std::string& error_msg)
|
||||
{
|
||||
ss::SS_IM_ForwardGuildCMMsg *forward_msg_copy = (ss::SS_IM_ForwardGuildCMMsg*)param.param1.GetUserData();
|
||||
cs::CMGuildAgree* msg_copy = (cs::CMGuildAgree*)param.param3.GetUserData();
|
||||
Guild* guild = GuildMgr::Instance()->GetGuild(param.sender);
|
||||
if (guild) {
|
||||
guild->SendErrorMsg(param.param2, forward_msg_copy->context(), "服务器内部错误");
|
||||
}
|
||||
delete msg_copy;
|
||||
delete forward_msg_copy;
|
||||
},
|
||||
crc32_code
|
||||
);
|
||||
ClearApplyBySenderId(msg.apply().base_data().account_id());
|
||||
}
|
||||
|
||||
void Guild::_CMGuildRefuse(f8::MsgHdr& hdr, const cs::CMGuildRefuse& msg)
|
||||
@ -1380,3 +1419,73 @@ void Guild::CombineRepeatApply()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Guild::GuildAgreeCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildAgree& msg)
|
||||
{
|
||||
cs::SMGuildAgree respmsg;
|
||||
GuildMember* member = GetMember(msg.apply().base_data().account_id());
|
||||
if (member) {
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdateOnlyOnline(this, member, kGuildUpdateReasonAgree);
|
||||
GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle,
|
||||
context,
|
||||
respmsg);
|
||||
DBHelper::Instance()->SetGuildApplyStatus
|
||||
(
|
||||
msg.apply().base_data().account_id(),
|
||||
guild_id_,
|
||||
kGuildApplyAgree
|
||||
);
|
||||
ClearApplyBySenderId(msg.apply().base_data().account_id());
|
||||
return;
|
||||
}
|
||||
if (IsFull()) {
|
||||
SendErrorMsg(socket_handle, context, "公会人数已达上限");
|
||||
respmsg.set_errcode(1);
|
||||
respmsg.set_errmsg("公会人数已达上限");
|
||||
GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle,
|
||||
context,
|
||||
respmsg);
|
||||
return;
|
||||
}
|
||||
GuildMember* sender = GetMember(context.user_info().base_data().account_id());
|
||||
if (!sender) {
|
||||
SendErrorMsg(socket_handle, context, "服务器内部错误");
|
||||
respmsg.set_errcode(2);
|
||||
respmsg.set_errmsg("服务器内部错误");
|
||||
GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle,
|
||||
context,
|
||||
respmsg);
|
||||
return;
|
||||
}
|
||||
if (!(
|
||||
GetMemberJob(sender->account_id) == kGuildOwner ||
|
||||
GetMemberJob(sender->account_id) == kGuildAdmin)
|
||||
) {
|
||||
SendErrorMsg(socket_handle, context, "权限不够");
|
||||
respmsg.set_errcode(3);
|
||||
respmsg.set_errmsg("权限不够");
|
||||
GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle,
|
||||
context,
|
||||
respmsg);
|
||||
return;
|
||||
}
|
||||
GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle,
|
||||
context,
|
||||
respmsg);
|
||||
|
||||
member = new GuildMember();
|
||||
TypeConvert::Convert(msg.apply().base_data(), *member);
|
||||
AddMember(member);
|
||||
member_job_hash_[member->account_id] = kGuildMember;
|
||||
std::set<std::string>* members = GetJobMembers(kGuildMember);
|
||||
members->insert(member->account_id);
|
||||
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonAgree);
|
||||
DBHelper::Instance()->SetGuildApplyStatus
|
||||
(
|
||||
msg.apply().base_data().account_id(),
|
||||
guild_id_,
|
||||
kGuildApplyAgree
|
||||
);
|
||||
ClearApplyBySenderId(msg.apply().base_data().account_id());
|
||||
}
|
||||
|
@ -69,6 +69,7 @@ private:
|
||||
void GuildRenameCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildChange& msg);
|
||||
void RemoveHandledApply();
|
||||
void CombineRepeatApply();
|
||||
void GuildAgreeCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildAgree& msg);
|
||||
|
||||
private:
|
||||
bool dirty_ = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user