コード例 #1
0
	Bool HsPlayer::OnInnerMsg(const HawkMsg& sMsg)
	{
		if (sMsg.Msg == HSM_DISCONNECT)
		{
			OnPlayerLogout();
			return true;
		}

		return false;
	}
コード例 #2
0
ファイル: LoginModule.cpp プロジェクト: songjundev/b
bool CLoginModule::_HandlePacket_PlayerLogout(Packet* pack)
{
	if( !pack )
		return false;

	Message::PlayerLogout msg;
	PROTOBUF_CMD_PARSER( pack, msg );

	return OnPlayerLogout( msg.pid() );
}
コード例 #3
0
ファイル: GameService.cpp プロジェクト: wudaijun/NGServer
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;
}