Pular para o conteúdo principal

Bibliotecas Auxiliares

Utilizamos várias bibliotecas auxiliares como dependências para nossos componentes principais.

Publicamos as nossas bibliotecas usando o JitPack!

JitPack.io é um serviço de repositório de pacotes que permite o compartilhamento e distribuição fácil de bibliotecas Java compilando o código-fonte de repositórios Git sob demanda.

O processo para publicar uma nova versão consiste em criar uma tag com o nome como a versão do componente e fazer push.

É necessário adicionar esta declaração de repositório ao seu projeto para usá-lo:

<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>

MMO Core ​

MMOCore é um componente fundamental do projeto, é uma biblioteca que fornece uma implementação abstrata do mecanismo de rede. É usado tanto no Servidor de Login quanto no Servidor de Jogo para enviar/receber dados para/de clientes, há dois (principais) métodos para cifrar/decifrar que devem ser implementados no servidor de jogo. O tratamento do buffer é feito na classe SelectorThread.

Estamos usando uma arquitetura não bloqueante multiplexada de um único thread para entrada/saída mais um grupo de threads para processar pacotes recebidos. DrHouse

<dependency>
<groupId>org.bitbucket.l2jserver</groupId>
<artifactId>l2j-server-mmocore</artifactId>
<version>2.6.5.0</version>
</dependency>

Discussão sobre Asynchronous I/O, Multi-threaded MMOCore e aqui.

L2J Geo Driver ​

É a implementação padrão do Motor de Geodados.

<dependency>
<groupId>org.bitbucket.l2jserver</groupId>
<artifactId>l2j-server-geo-driver</artifactId>
<version>2.6.5.0</version>
</dependency>

L2J Commons ​

É uma biblioteca de utilidade que contém várias classes que resolvem uma variedade de problemas dentro do servidor de login e do servidor de jogo.

<dependency>
<groupId>org.bitbucket.l2jserver</groupId>
<artifactId>l2j-server-commons</artifactId>
<version>2.6.7.0</version>
</dependency>

Serviço UPnP​

Universal Plug and Play (UPnP) é um conjunto de protocolos de rede que permite que dispositivos numa rede local descubram e se comuniquem automaticamente entre si. Simplifica a conectividade e configuração de dispositivos. UPnP também pode ser usado para encaminhamento de portas, o que permite acesso remoto a dispositivos atrás de um roteador. Com UPnP, dispositivos podem solicitar ao roteador criar e gerenciar automaticamente regras de encaminhamento de portas, eliminando a necessidade de configuração manual do roteador. Isso facilita para os usuários habilitarem acesso remoto a seus dispositivos sem exigir amplo conhecimento de redes ou procedimentos de configuração complexos.

info

Habilitado por padrão.

Fábrica de Conexões e Pool de Conexões​

O L2J Server utiliza o JDBC simples (Java Database Connectivity), pode melhorar o desempenho em relação à frameworks de nível superior como JPA (Java Persistence API) ou outras opções porque oferece acesso direto e de baixo nível ao banco de dados, permitindo um controle detalhado e otimização das consultas SQL, estratégias de obtenção de dados e recursos específicos do banco de dados.

O L2J Server utiliza um pool de conexões para gerenciar um conjunto de conexões com o banco de dados, permitindo que o servidor reutilize e compartilhe conexões com um banco de dados. Isso ajuda a melhorar o desempenho e a escalabilidade, reduzindo o overhead de estabelecer novas conexões com o banco de dados para cada solicitação.

Por padrão, o L2J Server utiliza o HikariCP, uma biblioteca de pool de conexões JDBC de alto desempenho para aplicativos Java. O HikariCP oferece várias características que o tornam uma escolha popular para pooling de conexões, incluindo tamanho leve, baixa latência, alto throughput e gerenciamento automático de conexões.

Motor Blowfish​

O algoritmo Blowfish é um cifrador de bloco simétrico que opera em blocos de dados e utiliza uma chave de comprimento variável. Foi projetado por Bruce Schneier em 1993 e é conhecido por sua flexibilidade e segurança.

Os métodos tryEncryptBlock e tryDecryptBlock realizam verificação de erros para garantir que os buffers de entrada e saída tenham tamanho suficiente. Os métodos encryptBlock e decryptBlock realmente realizam as operações de criptografia e descriptografia nos blocos de dados usando o algoritmo Blowfish.

Utils​

HexUtils​

A classe HexUtils é uma classe de utilidade que fornece métodos para converter dados em representações de caracteres hexadecimais e realizar operações relacionadas, como gerar despejos hexadecimais. Inclui funções para converter bytes e inteiros nas suas representações hexadecimais, gerar despejos hexadecimais de matrizes de bytes e converter matrizes de bytes em caracteres ASCII.

IPv4Filter​

Esta classe é uma implementação de um filtro IPv4 que permite ou nega conexões com base na proteção contra inundação para endereços IP específicos.

Rnd​

Rnd fornece funcionalidade de geração de números aleatórios. Oferece diferentes tipos de geradores de números aleatórios com base no RandomType especificado.

Os tipos disponíveis são:

  • SECURE: usa SecureRandom para a melhor qualidade aleatória.
  • UNSECURE_ATOMIC: usa java.util.Random para qualidade aleatória média.
  • UNSECURE_THREAD_LOCAL: usa ThreadLocalRandom para velocidade de acesso paralelo. Cada thread tem sua própria instância aleatória.
  • UNSECURE_VOLATILE: usa NonAtomicRandom para uma velocidade de acesso paralelo mais rápida. Pode gerar a mesma semente para dois threads.

Util​

A classe contém vários métodos estáticos que oferecem diferentes funcionalidades.

Aqui está um resumo dos métodos fornecidos pela classe Util:

  • isInternalHostname(String host): Este método verifica se um nome de host é interno, verificando se é um endereço local do site ou um endereço de loopback.
  • printData(byte[] data, int len): Este método gera uma representação hexadecimal de uma matriz de bytes. Ele leva a matriz de bytes e o comprimento dos dados a serem representados e retorna a representação hexadecimal como uma string.
  • printData(byte[] data): Este método é uma abreviação para printData(byte[] data, int len) e imprime toda a matriz de bytes no formato hexadecimal.
  • printData(ByteBuffer buf): Este método representa os bytes restantes de um ByteBuffer como uma string hexadecimal.
  • generateHex(int size): Este método gera uma sequência aleatória de bytes do tamanho especificado e a retorna como uma matriz de bytes.
  • getStackTrace(Throwable t): Este método recebe um objeto Throwable e retorna a sua pilha de rastreamento como uma string.
  • replaceIllegalCharacters(String str): Este método substitui a maioria dos caracteres inválidos numa string por um caractere de sublinhado.
  • isValidFileName(String name): Este método verifica se um nome de arquivo é válido criando um objeto File com o nome fornecido e verificando se ele pode recuperar o seu caminho canônico sem lançar uma exceção.
  • splitWords(String input): Este método divide palavras numa string inserindo um espaço entre uma letra minúscula seguida de uma letra maiúscula.
  • getNextClosestDateTime(DayOfWeek[] daysOfWeek, int hour, int min): Este método calcula a data mais próxima ou a mesma mais próxima a partir dos dias da semana especificados na hora e no minuto especificados.
  • getNextClosestDateTime(List<DayOfWeek> daysOfWeek, int hour, int min): Esta é uma versão sobrecarregada do método anterior que aceita uma lista de objetos DayOfWeek em vez de uma matriz.
  • mapToFunction(Map<K, V> map): Este método converte um mapa numa função, onde a função retorna o valor associado a uma chave específica no mapa.
  • parseArg(String[] args, String arg, boolean hasArgValue): Este método analisa um argumento dado dos argumentos do programa Java. Ele pode recuperar o argumento em si ou o seu valor, se especificado.
  • randomPassword(int length): Este método gera uma senha aleatória do comprimento especificado. A senha contém uma combinação de caracteres minúsculos, maiúsculos e dígitos.