#include "precompile.h" #include #include "player.h" #include "playermgr.h" #include "dbengine.h" #include "app.h" #include "MSConnMgr.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; } ForwardMsgToMasterServer(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; } ForwardMsgToMasterServer(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; } ForwardMsgToMasterServer(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; } ForwardMsgToMasterServer(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; } ForwardMsgToMasterServer(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; } ForwardMsgToMasterServer(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; } ForwardMsgToMasterServer(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::ForwardMsgToMasterServer(f8::MsgHdr& hdr, long long hash_code) { ss::SS_IM_ForwardMsg msg; FillIMMsgConext(hdr, msg.mutable_context()); if (hdr.buflen > 0) { msg.mutable_payload()->assign(hdr.buf, hdr.buflen); } MSConnMgr::Instance()->SendMsg(msg, hash_code); }