nadybot / aolib
基于 amphp3 的 Anarchy Online 聊天服务器客户端库
0.1.3
2024-09-14 21:36 UTC
Requires
- php: >=8.1.17
- amphp/byte-stream: ^2.1.0
- amphp/file: ^3.0
- amphp/pipeline: ^1.1
- nadylib/leaky-bucket: ^0.1.0
- psr/log: ^1|^2|^3
- thecodingmachine/safe: ^2.0
Requires (Dev)
- beste/psr-testlogger: ^1.0
- composer-phar/php-cs-fixer: ^3.51.0
- composer-phar/phpstan: ^1.10
- nadybot/nadystyle: ^1.0.0
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.8
- thecodingmachine/phpstan-safe-rule: ^1.2
README
这是一个非常基础的库,提供了基于 AMP3 的异步类来处理与 Anarchy Online 聊天服务器的连接。它包括
- 一个标记化器,可以从无限流(文件、套接字等)中提取单个数据包
- 一个连接处理器,使用标记化器将这些字符串数据包解析为二进制数据包
- 一个解析器,将这些二进制数据包解析为 AO 数据包
- 一个 MMDB 数据库类,用于访问内置字符串
- 一个基本的客户端,结合所有这些功能,并跟踪已知的 uid 与名称映射,以及使这些查找看起来像是同步调用一样可用
你必须熟悉 AMP 处理事物的方式,否则,这对您来说没有用处。
基本用法
<?php declare(strict_types=1); use function Amp\Socket\connect; use Monolog\Handler\StreamHandler; use Monolog\Processor\PsrLogMessageProcessor; use Monolog\{Level, Logger}; require_once __DIR__ . "/../vendor/autoload.php"; $logger = new Logger('mylogger'); $logger->pushHandler(new StreamHandler("php://stdout", Level::Debug)); $logger->pushProcessor(new PsrLogMessageProcessor(null, true)); $socket = connect("chat.d1.funcom.com:7105"); $client = new \AO\Client\Basic( $logger, new \AO\Connection($logger, $socket, $socket); \AO\Parser::createDefault($logger) ); $client->login(username: "Myuser", password: "Mypassword", character: "Mychar"); while (($package = $client->read()) !== null) { // Process package }
这仅仅触及了这个库所能做到的一小部分。我不期望其他人使用这段代码,所以如果我有误,请向前一步。
请查看客户端的代码以了解用法。您是扩展它还是包装它取决于您,但扩展是更优雅的解决方案。
查找
查找名称或 UID 如此进行
$uid = $client->lookupUid("Nady"); $character = $client->lookupCharacter(123456);
所有逻辑都在幕后发生。您将收到一个整数/字符串或 null。
发送数据包
这是最基本的应用程序界面
$client->write(new Out\Tell(charId: 1234, message: "Hello!"));
多字符使用
<?php declare(strict_types=1); use AO\Client\{Multi, WorkerConfig}; require_once __DIR__ . "/../vendor/autoload.php"; $client = new Multi( mainCharacter: "Char1", workers: [ new WorkerConfig( dimension: 5, username: "login1", password: "password1", character: "Char1", ), new WorkerConfig( dimension: 5, username: "login2", password: "password2", character: "Char2", ), ] ); $client->login(); foreach ($client->getPackages() as $package) { // Do something } EventLoop::run();
运行测试
请确保您已安装开发包,并运行 vendor/bin/phpunit -c phpunit.xml
开发
代码是在 VSCode 下编写的,使用了以下扩展
- PHP Intelephense (bmewburn.vscode-intelephense-client)
- phpcs (shevaua.phpcs)
- phpstan (sanderronde.phpstan-vscode)
- PHPUnit Watcher (herisit.phpunit-watcher)
- Simple PHP CS Fixer 3 (phlak.simple-php-cs-fixer-3)
提供的 .vscode/settings.json
文件应自动配置它们与此项目一起使用。