2020-05-12 17:39:01 +08:00

253 lines
6.2 KiB
C++

#include "precompile.h"
#include <a8/openssl.h>
#include "player.h"
#include "playermgr.h"
#include "dbengine.h"
#include "MSConnMgr.h"
#include "dbengine.h"
#include "app.h"
void Player::Init()
{
crc32_code = a8::openssl::Crc32(
(unsigned char*)account_id.data(),
account_id.size()
);
SyncLocToMasterServer();
NotifyOnline();
AsyncGetFriendList();
}
void Player::UnInit()
{
timer_attacher.ClearTimerList();
}
void Player::_CMFriendList(f8::MsgHdr& hdr, const cs::CMFriendList& msg)
{
cs::SMFriendList respmsg;
if (friend_list_syncok_) {
FillFriendList(respmsg.mutable_friend_list());
} else {
if (!reading_friends_list_) {
AsyncGetFriendList();
}
respmsg.set_error_code(1);
}
SendMsg(respmsg);
}
void Player::_CMFriendInvite(f8::MsgHdr& hdr, const cs::CMFriendInvite& msg)
{
cs::SMFriendInvite respmsg;
SendMsg(respmsg);
}
void Player::_CMFriendIgnore(f8::MsgHdr& hdr, const cs::CMFriendIgnore& msg)
{
cs::SMFriendIgnore respmsg;
SendMsg(respmsg);
}
void Player::_CMFriendDelete(f8::MsgHdr& hdr, const cs::CMFriendDelete& msg)
{
cs::SMFriendDelete respmsg;
SendMsg(respmsg);
}
void Player::_CMGroupCreate(f8::MsgHdr& hdr, const cs::CMGroupCreate& msg)
{
if (group_id != 0) {
cs::SMGroupCreate respmsg;
respmsg.set_error_code(1);
respmsg.set_error_msg("你已经有群");
SendMsg(respmsg);
return;
}
ForwardGroupCMMsg(hdr, App::Instance()->NewUUID());
}
void Player::_CMGroupJoin(f8::MsgHdr& hdr, const cs::CMGroupJoin& msg)
{
if (group_id != 0) {
cs::SMGroupJoin respmsg;
respmsg.set_error_code(1);
respmsg.set_error_msg("你已经有群");
SendMsg(respmsg);
return;
}
ForwardGroupCMMsg(hdr, group_id);
}
void Player::_CMGroupAgree(f8::MsgHdr& hdr, const cs::CMGroupAgree& msg)
{
if (group_id == 0) {
cs::SMGroupAgree respmsg;
respmsg.set_error_code(2);
respmsg.set_error_msg("你还没有群");
SendMsg(respmsg);
return;
}
ForwardGroupCMMsg(hdr, group_id);
}
void Player::_CMGroupKick(f8::MsgHdr& hdr, const cs::CMGroupKick& msg)
{
if (group_id == 0) {
cs::SMGroupKick respmsg;
respmsg.set_error_code(2);
respmsg.set_error_msg("你还没有群");
SendMsg(respmsg);
return;
}
ForwardGroupCMMsg(hdr, group_id);
}
void Player::_CMGroupQuit(f8::MsgHdr& hdr, const cs::CMGroupQuit& msg)
{
if (group_id == 0) {
cs::SMGroupQuit respmsg;
respmsg.set_error_code(2);
respmsg.set_error_msg("你还没有群");
SendMsg(respmsg);
return;
}
ForwardGroupCMMsg(hdr, group_id);
}
void Player::_CMGroupDismiss(f8::MsgHdr& hdr, const cs::CMGroupDismiss& msg)
{
if (group_id == 0) {
cs::SMGroupQuit respmsg;
respmsg.set_error_code(2);
respmsg.set_error_msg("你还没有群");
SendMsg(respmsg);
return;
}
ForwardGroupCMMsg(hdr, group_id);
}
void Player::_CMGroupRename(f8::MsgHdr& hdr, const cs::CMGroupRename& msg)
{
if (group_id == 0) {
cs::SMGroupRename respmsg;
respmsg.set_error_code(2);
respmsg.set_error_msg("你还没有群");
SendMsg(respmsg);
return;
}
ForwardGroupCMMsg(hdr, group_id);
}
void Player::ReLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg)
{
cs::SMLogin respmsg;
WSListener::Instance()->SendToClient(hdr.socket_handle, 0, respmsg);
PlayerMgr::Instance()->ReBindSocket(hdr.socket_handle, this);
SyncLocToMasterServer();
}
void Player::SyncLocToMasterServer()
{
}
void Player::NotifyOnline()
{
}
void Player::NotifyOffline()
{
}
void Player::AsyncGetFriendList()
{
}
void Player::FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list)
{
for (auto& pair : friend_hash_) {
auto p = friend_list->Add();
p->set_account_id(pair.second.account_id);
p->set_nickname(pair.second.nickname);
p->set_avatar_url(pair.second.avatar_url);
p->set_sex(pair.second.sex);
p->set_online(pair.second.online);
}
}
void Player::FillIMMsgConext(f8::MsgHdr& hdr, ss::MFIMMsgConext* conext)
{
conext->set_socket_handle(hdr.socket_handle);
conext->set_account_id(account_id);
conext->set_nickname(nickname);
conext->set_avatar_url(avatar_url);
conext->set_sex(sex);
#if 1
conext->set_online(true);
#else
conext->set_online(online);
#endif
conext->set_msgid(hdr.msgid);
}
void Player::ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code)
{
ss::SS_MS_ForwardGroupCMMsg msg;
FillIMMsgConext(hdr, msg.mutable_context());
if (hdr.buflen > 0) {
msg.mutable_payload()->assign(hdr.buf, hdr.buflen);
}
MSConnMgr::Instance()->SendMsg(msg, hash_code);
}
void Player::FillFriendDB(cs::MFFriendDB& friend_db)
{
}
void Player::SaveToDB()
{
cs::MFFriendDB friend_db;
FillFriendDB(friend_db);
std::string friend_data;
friend_db.SerializeToString(&friend_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(crc32_code);
DBEngine::Instance()->
ExecAsyncScript(
conn_info,
"INSERT `friend`(account_id, friend_data, createtime, modifytime) "
"VALUES('%s', '%s', %d, %d) "
"ON DUPLICATE KEY UPDATE friend_data='%s', modifytime=%d; ",
{
account_id,
friend_data,
App::Instance()->nowtime,
App::Instance()->nowtime,
friend_data,
App::Instance()->nowtime
},
a8::XParams(),
on_ok,
on_error,
crc32_code
);
}