Bool HsPlayer::OnInnerMsg(const HawkMsg& sMsg) { if (sMsg.Msg == HSM_DISCONNECT) { OnPlayerLogout(); return true; } return false; }
bool CLoginModule::_HandlePacket_PlayerLogout(Packet* pack) { if( !pack ) return false; Message::PlayerLogout msg; PROTOBUF_CMD_PARSER( pack, msg ); return OnPlayerLogout( msg.pid() ); }
bool GameService::ProcessMsg(UserMessage* msg) { if (!msg) return false; UserMessageT<PlayerSessionPtr>* msgT = dynamic_cast<UserMessageT<PlayerSessionPtr>*>(msg); if (msgT == nullptr) return false; PlayerSessionPtr session = msgT->GetClient(); if (!session) return false; int32_t sid = session->GetSid(); if (sid != _sid) { // 不是本服务的消息 转发 return ServiceManager::Send(sid, msg); } if (msg->_len == 0) { OnPlayerLogout(session.get()); return true; } ProtocolReader reader(msg->_data, msg->_len); uint16_t msgid = reader.ReadMsgId(); CallBackType cbType = _calltype[msgid]; switch (cbType) { case CallBackType::cbSessioDelegate: { // 回调 assert(session != nullptr); auto arg = std::pair<PlayerSession*, ProtocolReader&>(session.get(), reader); _session_delegate.Call(msgid, arg); } break; case CallBackType::cbPlayerDelegate: { std::shared_ptr<Player> player = session->GetPlayerToken(); assert(player != nullptr); auto arg = std::pair<Player*, ProtocolReader&>(player.get(), reader); _player_delegate.Call(msgid, arg); } } return true; }