1
This commit is contained in:
parent
3142003862
commit
9c71885dab
@ -1,6 +1,7 @@
|
|||||||
#include "precompile.h"
|
#include "precompile.h"
|
||||||
|
|
||||||
#include <a8/timer.h>
|
#include <a8/timer.h>
|
||||||
|
#include <a8/openssl.h>
|
||||||
#include <a8/mutable_xobject.h>
|
#include <a8/mutable_xobject.h>
|
||||||
|
|
||||||
#include "guild.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;
|
ss::SS_IM_ForwardGuildCMMsg *forward_msg = (ss::SS_IM_ForwardGuildCMMsg*)hdr.user_data;
|
||||||
|
|
||||||
cs::SMGuildAgree respmsg;
|
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()) {
|
if (IsFull()) {
|
||||||
SendErrorMsg(hdr.socket_handle, forward_msg->context(), "公会人数已达上限");
|
SendErrorMsg(hdr.socket_handle, forward_msg->context(), "公会人数已达上限");
|
||||||
respmsg.set_errcode(1);
|
respmsg.set_errcode(1);
|
||||||
@ -318,25 +304,78 @@ void Guild::_CMGuildAgree(f8::MsgHdr& hdr, const cs::CMGuildAgree& msg)
|
|||||||
respmsg);
|
respmsg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
|
||||||
forward_msg->context(),
|
|
||||||
respmsg);
|
|
||||||
|
|
||||||
member = new GuildMember();
|
ss::SS_IM_ForwardGuildCMMsg *forward_msg_copy = new ss::SS_IM_ForwardGuildCMMsg;
|
||||||
TypeConvert::Convert(msg.apply().base_data(), *member);
|
*forward_msg_copy = *forward_msg;
|
||||||
AddMember(member);
|
cs::CMGuildAgree* msg_copy = new cs::CMGuildAgree;
|
||||||
member_job_hash_[member->account_id] = kGuildMember;
|
*msg_copy = msg;
|
||||||
std::set<std::string>* members = GetJobMembers(kGuildMember);
|
|
||||||
members->insert(member->account_id);
|
|
||||||
|
|
||||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonAgree);
|
unsigned int crc32_code = a8::openssl::Crc32
|
||||||
DBHelper::Instance()->SetGuildApplyStatus
|
|
||||||
(
|
(
|
||||||
msg.apply().base_data().account_id(),
|
(unsigned char*)msg.apply().base_data().account_id().data(),
|
||||||
guild_id_,
|
msg.apply().base_data().account_id().size()
|
||||||
kGuildApplyAgree
|
);
|
||||||
|
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)
|
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 GuildRenameCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildChange& msg);
|
||||||
void RemoveHandledApply();
|
void RemoveHandledApply();
|
||||||
void CombineRepeatApply();
|
void CombineRepeatApply();
|
||||||
|
void GuildAgreeCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildAgree& msg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool dirty_ = false;
|
bool dirty_ = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user