跳转到正文

辅助库

我们使用多个辅助库作为主要组件的依赖项。

我们使用 JitPack 发布我们的库!

JitPack.io 是一个软件包仓库服务,它通过按需从 Git 仓库构建源代码,使 Java 库的共享和分发变得容易。

发布新版本的过程包括:创建一个以组件版本命名的标签(tag)并将其推送到仓库。

要使用这些库,需要在项目中添加此仓库声明:

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

MMO Core

MMOCore 是项目的一个基础组件,它是一个提供网络引擎抽象实现的库。登录服务器和游戏服务器都使用它来向客户端发送数据或从客户端接收数据。有两个(主要)用于加密/解密的方法应该在游戏服务器上实现。缓冲区处理是在 SelectorThread 类中完成的。

我们对输入/输出采用非阻塞、多路复用的单线程架构,并使用线程池来处理可接收的封包。 —— DrHouse

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

关于异步 I/O、多线程 MMOCore 以及 此处 的讨论。

L2J Geo Driver

这是地理数据(Geodata)引擎的默认实现。

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

L2J Commons

它是一个工具库,包含多个解决登录服务器和游戏服务器中各种问题的类。

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

UPnP 服务

通用即插即用 (UPnP) 是一组联网协议,允许本地网络中的设备自动发现并相互通信。它简化了设备的连接和配置。UPnP 也可用于端口转发,允许远程访问路由器后的设备。通过 UPnP,设备可以请求路由器自动创建和管理端口转发规则,从而无需手动配置路由器。这让用户能够更轻松地启用对其设备的远程访问,而无需广泛的联网知识或复杂的设置程序。

信息

默认启用。

连接工厂和连接池

L2J Server 使用原生的 JDBC (Java Database Connectivity)。相比 JPA (Java Persistence API) 等更高级的框架,JDBC 可以提高性能,因为它提供了对数据库的直接和低级别访问,允许对 SQL 查询、数据抓取策略和数据库特定功能进行细粒度的控制和优化。

L2J Server 使用连接池来管理数据库连接池,允许服务器重用并共享与数据库的连接。通过减少为每个请求建立新数据库连接的开销,这有助于提高性能和可伸缩性。

默认情况下,L2J Server 使用 HikariCP,这是一个用于 Java 应用程序的高性能 JDBC 连接池库。HikariCP 提供了多项使其成为连接池热门选择的功能,包括轻量级占用、低延迟、高吞吐量和自动连接管理。

Blowfish 引擎

Blowfish 算法是一种对称分组加密(block cipher)算法,处理数据块并使用变长密钥。它由 Bruce Schneier 在 1993 年设计,以其灵活性和安全性而闻名。

tryEncryptBlocktryDecryptBlock 方法执行错误检查,以确保输入和输出缓冲区的大小足够。encryptBlockdecryptBlock 方法则实际利用 Blowfish 算法对数据块执行加密和解密操作。

工具类 (Utils)

HexUtils

HexUtils 类是一个工具类,提供将数据转换为十六进制字符表示以及执行相关操作(如生成 hex 导出)的方法。它包括将字节和整数转换为其十六进制表示、生成字节数组的十六进制 hex dump 以及将字节数组转换为 ASCII 字符的函数。

IPv4Filter

此类是 IPv4 过滤器的实现,允许或根据特定 IP 地址的洪水保护拒绝连接。

Rnd

Rnd 提供随机数生成功能。它根据指定的 RandomType 提供不同类型的随机数生成器。

可用类型包括:

  • SECURE:使用 SecureRandom 以获得最佳随机质量。
  • UNSECURE_ATOMIC:使用 java.util.Random 以获得平均随机质量。
  • UNSECURE_THREAD_LOCAL:使用 ThreadLocalRandom 以提高并行访问速度。每个线程都有自己的随机实例。
  • UNSECURE_VOLATILE:使用 NonAtomicRandom 以获得更快的并行访问速度。它可能会为两个线程生成相同的种子。

Util

该类包含多个提供不同功能的静态方法。

以下是 Util 类提供的方法摘要:

  • isInternalHostname(String host):通过验证主机名是否为站点本地地址或回环地址,检查该主机名是否为内部主机名。
  • 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):生成指定长度的随机密码。该密码包含小写字符、大写字符和数字的组合。