Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 07/13/24 em todas áreas

  1. Como Evitar Quedas no Servidor ao Exibir Mensagens de Admin (Error - void ServiceManager::run()) NETWORK: O endereço solicitado não é válido no contexto (Error - void ServicePort::open(IPAddressList, uint16_t)) NETWORK: O endereço solicitado não é válido no contexto Problema: Em determinadas situações, a exibição de mensagens de admin está causando a queda do servidor. Isso ocorre quando uma exceção não tratada é lançada ao tentar abrir portas de serviço. Solução: A solução envolve modificar o código em server.cpp para evitar que o servidor caia quando uma exceção é lançada. Vamos alterar o método ServicePort::open para tratar exceções de forma segura. Passos: Localize o Arquivo server.cpp: Abra o arquivo server.cpp no seu projeto. Você pode usar um editor de texto ou uma IDE de sua preferência. Encontre o Método ServicePort::open: Procure pelo método ServicePort::open no arquivo. O código original se parece com isto: void ServicePort::open(IPAddressList ips, uint16_t port) { m_pendingStart = false; m_serverPort = port; bool error = false; for(IPAddressList::iterator it = ips.begin(); it != ips.end(); ++it) { try { Acceptor_ptr tmp(new boost::asio::ip::tcp::acceptor(m_io_service, boost::asio::ip::tcp::endpoint(*it, m_serverPort))); accept(tmp); m_acceptors.push_back(tmp); } catch(std::exception& e) { m_pendingStart = true; Scheduler::getInstance().addEvent(createSchedulerTask(5000, boost::bind( &ServicePort::service, boost::weak_ptr<ServicePort>(shared_from_this()), *it, m_serverPort))); } } if(error) m_logError = false; } 3. Modifique o Método ServicePort::open Vamos alterar o código para tratar exceções de maneira adequada, evitando a queda do servidor. A versão modificada do método fica assim: void ServicePort::open(IPAddressList ips, uint16_t port) { m_pendingStart = false; m_serverPort = port; bool error = false; for(IPAddressList::iterator it = ips.begin(); it != ips.end(); ++it) { try { Acceptor_ptr tmp(new boost::asio::ip::tcp::acceptor(m_io_service, boost::asio::ip::tcp::endpoint(*it, m_serverPort))); accept(tmp); m_acceptors.push_back(tmp); } catch(std::exception& e) { // Tratamento de exceção vazio para evitar a queda do servidor } } } Recompile o Servidor Após fazer as modificações, salve o arquivo e recompile o servidor. Com essas mudanças, o servidor não deve mais cair quando uma exceção for lançada ao abrir portas de serviço. Este código foi testado e comprovado eficaz para evitar as quedas. Até mais by L3K0T
  2. Instalando o Sistema max_packets_per_seconds no Servidor 0.x Passo 1: Modificar o Connection.cpp Abra o arquivo Connection.cpp. Procure pela função: void Connection::parseHeader(const boost::system::error_code& error) Antes da linha: --m_pendingRead; try Adicione o seguinte código: uint32_t timePassed = std::max<uint32_t>(1, (time(NULL) - m_timeConnected) + 1); if ((++m_packetsSent / timePassed) > static_cast<uint32_t>(g_config.getNumber(ConfigManager::MAX_PACKETS_PER_SECOND))) { std::cout << convertIPAddress(getIP()) << " disconnected for exceeding packet per second limit." << std::endl; close(); m_connectionLock.unlock(); return; } if (timePassed > 2) { m_timeConnected = time(NULL); m_packetsSent = 0; } Passo 2: Modificar o Connection.h Abra o arquivo Connection.h. Procure pela classe: class Connection : public boost::enable_shared_from_this<Connection>, boost::noncopyable Abaixo de: m_protocol = NULL; Adicione: m_packetsSent = 0; m_timeConnected = time(NULL); Abaixo de: uint32_t m_refCount; Adicione: time_t m_timeConnected; uint32_t m_packetsSent; Passo 3: Modificar o ProtocolGame.cpp Abra o arquivo ProtocolGame.cpp. Procure pela função: void ProtocolGame::parsePacket(NetworkMessage &msg) Abaixo de: if(!player || !m_acceptPackets || g_game.getGameState() == GAME_STATE_SHUTDOWN || msg.getMessageLength() <= 0) return; Adicione: uint32_t now = time(NULL); if(m_packetTime != now) { m_packetTime = now; m_packetCount = 0; } ++m_packetCount; if(m_packetCount > (uint32_t)g_config.getNumber(ConfigManager::MAX_PACKETS_PER_SECOND)) return; Passo 4: Modificar o ProtocolGame.h Abra o arquivo ProtocolGame.h. Procure por: ProtocolGame(Connection_ptr connection): Protocol(connection) Substitua: m_eventConnect = 0; por: m_eventConnect = m_packetCount = m_packetTime = 0; Procure por: uint32_t m_eventConnect Substitua por: uint32_t m_eventConnect, m_maxSizeCount, m_packetCount, m_packetTime; Passo 5: Modificar o ConfigManager.cpp Abra o arquivo ConfigManager.cpp. Procure por: m_loaded = true; Acima disso, adicione: m_confNumber[MAX_PACKETS_PER_SECOND] = getGlobalNumber("max_packets_per_second", 500); Passo 6: Modificar o ConfigManager.h Abra o arquivo ConfigManager.h. Procure por LAST_NUMBER_CONFIG /* this must be the last one */ Acima disso, adicione: MAX_PACKETS_PER_SECOND, Passo 7: Modificar o config.lua No arquivo config.lua do seu servidor, adicione: max_packets_per_second = 80 Lembrando que, quanto maior o número, mais pacotes a pessoa pode enviar sem ser desconectada. Medidas para ajudar a proteger o servidor contra ataques de "packet flood" ou "SYN flood". Esses ataques envolvem o envio de um grande número de pacotes ao servidor em um curto espaço de tempo, com a intenção de sobrecarregar os recursos do servidor e causar falhas ou degradação no desempenho. Implementando o sistema max_packets_per_seconds, você está limitando o número de pacotes que cada conexão pode enviar por segundo. Isso ajuda a mitigar o impacto de ataques de flood, desconectando automaticamente conexões que excedem o limite configurado de pacotes por segundo. Essas mudanças melhoram a resiliência do seu servidor contra certos tipos de ataques de negação de serviço (DoS), contribuindo para a estabilidade e segurança do seu OTServer. Créditos @L3K0T por esse tutorial formatado. @Yan Liima [TFS 0.4 REV3996] pelo código
  3. OTClient Personal

    L3K0T reagiu a BonasxD por uma resposta no tópico

    1 ponto
    Ta muito bom mano !
  4. Harry Potter Sprites - FREE

    L3K0T reagiu a Hadggar por uma resposta no tópico

    1 ponto
    Bom primeiramente por que estou postando?, bom obvio é que tenho direitos autorais sobre elas, e hoje permito que vocês a usem, ou seja é free for use, eu paguei 500 reais, nessas sprites, e bom tive muitos problemas com o spriter, @geraldoo.maranhao, e bom primeiramente antes disso, eu estava desenvolvendo um projeto também baseado em harry potter, e nem sabia da existencia do projeto dele, e bom ele me acusou de ter ripado as sprites dele, por eu ter conseguido em uma pagina umas das sprites q o mesmo tinha copiado, e nem eu sabia que ele usava, então o mesmo me acusou de plagio e etc, depois com o tempo comprei as sprites dele, e ele sempre prestando um atendimento horrível, me tratando super mal, e me acusando de plagio etc, o próprio tinha postado no otland, e super acusaram ele de plagio, ou seja né, bem surreal, mas bem queria deixar meu feedback até mesmo sobre o profissional que ele é, e dizer que não recomendaria, pela pessoa meia perturbada, e pela falta de profissionalismo que ele possui, seja no atendimento ou entrega. um pouco do que possui no pacote: Resolvi postar, por ter desistido totalmente do projeto, e esta trabalhando em um totalmente distinto do antigo, focado na plataforma mobile, e bom espero que possa ser útil para alguém, já que meus 500 reais não voltam mais, e também estou postando, por que o mesmo estava me vendendo o pacote por 1.000, eu comprei 500 reais, e ele agora esta vendendo por 500 tudo, até as que eu comprei, antes de eu confirmar a comprar com o mesmo, ele jurou que iria apagar e não iria revender, mais um motivo de indignação. Download - Mediafire (link quebrado) Download - Tibia King Scan - VirusTotal
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo