253 lines
6.2 KiB
C++
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
|
|
);
|
|
}
|