Допоміжні бібліотеки
Ми використовуємо кілька допоміжних бібліотек як залежності для наших основних компонентів.
Ми публікуємо наші бібліотеки за допомогою 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.