Перейти к основному контенту

Вспомогательные библиотеки

Мы используем несколько вспомогательных библиотек в качестве зависимостей для наших основных компонентов.

Мы публикуем наши библиотеки с помощью JitPack!

JitPack.io — это сервис репозитория пакетов, который позволяет легко обмениваться и распространять библиотеки Java путем сборки исходного кода из Git-репозиториев по запросу.

Процесс публикации новой версии состоит из создания нового тега с именем, соответствующим версии компонента, и его отправки (push).

Для использования необходимо добавить это объявление репозитория в ваш проект:

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

MMO Core

MMOCore является фундаментальным компонентом проекта, это библиотека, которая предоставляет абстрактную реализацию сетевого движка. Она используется Login Server и Game Server для отправки/получения данных от клиентов. Существует два (основных) метода шифрования/дешифрования, которые должны быть реализованы на игровом сервере. Обработка буфера выполняется в классе SelectorThread.

Мы используем неблокирующую мультиплексированную однопоточную архитектуру для ввода/вывода плюс пул потоков для обработки принимаемых пакетов. DrHouse

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

Обсуждение Asynchronous I/O, Multi-threaded MMOCore и здесь

L2J Geo Driver

Это стандартная реализация движка геодаты (Geodata Engine).

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

L2J Commons

Это служебная библиотека, содержащая несколько классов, которые решают различные проблемы в Login и Game серверах.

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

Служба UPnP

Universal Plug and Play (UPnP) — это набор сетевых протоколов, который позволяет устройствам в локальной сети автоматически обнаруживать друг друга и взаимодействовать. Это упрощает подключение и настройку устройств. UPnP также можно использовать для перенаправления портов (port forwarding), что обеспечивает удаленный доступ к устройствам за маршрутизатором. С помощью UPnP устройства могут запрашивать у маршрутизатора автоматическое создание и управление правилами перенаправления портов, устраняя необходимость ручной настройки маршрутизатора. Это упрощает пользователям удаленный доступ к своим устройствам без необходимости в глубоких сетевых знаниях или сложных процедурах настройки.

инфо

Включено по умолчанию.

Фабрика соединений и пул соединений

L2J Server использует чистый JDBC (Java Database Connectivity), это может повысить производительность по сравнению с высокоуровневыми фреймворками, такими как JPA (Java Persistence API), поскольку обеспечивает прямой и низкоуровневый доступ к базе данных, позволяя осуществлять тонкую настройку и оптимизацию SQL-запросов, стратегий выборки данных и специфических функций базы данных.

L2J Server использует пул соединений для управления набором соединений с базой данных, позволяя серверу повторно использовать и совместно использовать соединения. Это помогает повысить производительность и масштабируемость за счет снижения накладных расходов на установку новых соединений для каждого запроса.

По умолчанию L2J Server использует HikariCP — высокопроизводительную библиотеку пула соединений JDBC для приложений Java. HikariCP предлагает несколько функций, которые делают его популярным выбором, включая легкость, низкую задержку, высокую пропускную способность и автоматическое управление соединениями.

Движок Blowfish

Алгоритм Blowfish — это симметричный блочный шифр, который работает с блоками данных и использует ключ переменной длины. Он был разработан Брюсом Шнайером в 1993 году и известен своей гибкостью и безопасностью.

Методы tryEncryptBlock и tryDecryptBlock выполняют проверку ошибок, чтобы убедиться, что входные и выходные буферы имеют достаточный размер. Методы encryptBlock и decryptBlock фактически выполняют операции шифрования и дешифрования блоков данных с использованием алгоритма Blowfish.

Утилиты (Utils)

HexUtils

Класс HexUtils — это служебный класс, который предоставляет методы для преобразования данных в шестнадцатеричные представления символов и выполнения связанных операций, таких как создание шестнадцатеричных дампов (hex dumps). Он включает функции для преобразования байтов и целых чисел в их шестнадцатеричные представления, создания дампов массивов байтов и преобразования массивов байтов в символы ASCII.

IPv4Filter

Этот класс представляет собой реализацию фильтра IPv4, который разрешает или запрещает соединения на основе защиты от флуда (flood protection) для определенных IP-адресов.

Rnd

Rnd предоставляет функциональность генерации случайных чисел. Он предлагает различные типы генераторов случайных чисел на основе указанного RandomType.

Доступные типы:

  • SECURE: использует SecureRandom для наилучшего качества случайных чисел.
  • UNSECURE_ATOMIC: использует java.util.Random для среднего качества.
  • UNSECURE_THREAD_LOCAL: использует ThreadLocalRandom для скорости параллельного доступа. Каждому потоку соответствует свой экземпляр рандома.
  • UNSECURE_VOLATILE: использует NonAtomicRandom для более быстрой скорости параллельного доступа. Может генерировать одно и то же зерно (seed) для двух потоков.

Util

Класс содержит несколько статических методов, предлагающих различные функциональные возможности.

Ниже приведено краткое описание методов, предоставляемых классом Util:

  • isInternalHostname(String host): проверяет, является ли имя хоста внутренним, проверяя, является ли оно локальным адресом сайта или адресом обратной петли (loopback).
  • printData(byte[] data, int len): генерирует шестнадцатеричное представление массива байтов. Принимает массив байтов и длину данных и возвращает шестнадцатеричное представление в виде строки.
  • printData(byte[] data): сокращение для printData(byte[] data, int len), печатает весь массив байтов в шестнадцатеричном формате.
  • printData(ByteBuffer buf): представляет оставшиеся байты ByteBuffer в виде шестнадцатеричной строки.
  • generateHex(int size): генерирует случайную последовательность байтов указанного размера и возвращает ее в виде массива байтов.
  • getStackTrace(Throwable t): принимает объект Throwable и возвращает его трассировку стека в виде строки.
  • replaceIllegalCharacters(String str): заменяет большинство недопустимых символов в строке символом подчеркивания.
  • isValidFileName(String name): проверяет допустимость имени файла, создавая объект File с заданным именем и проверяя возможность получения его канонического пути.
  • splitWords(String input): разделяет слова в строке, вставляя пробел между строчной буквой, за которой следует заглавная.
  • getNextClosestDateTime(DayOfWeek[] daysOfWeek, int hour, int min): вычисляет следующую ближайшую дату из указанных дней недели в указанный час и минуту.
  • getNextClosestDateTime(List<DayOfWeek> daysOfWeek, int hour, int min): перегруженная версия предыдущего метода, принимающая список объектов DayOfWeek вместо массива.
  • mapToFunction(Map<K, V> map): преобразует карту (map) в функцию, где функция возвращает значение, связанное с заданным ключом в карте.
  • parseArg(String[] args, String arg, boolean hasArgValue): анализирует заданный аргумент из аргументов программы Java.
  • randomPassword(int length): генерирует случайный пароль указанной длины, содержащий комбинацию строчных, прописных букв и цифр.