nadybot/aolib

基于 amphp3 的 Anarchy Online 聊天服务器客户端库

0.1.3 2024-09-14 21:36 UTC

This package is auto-updated.

Last update: 2024-09-14 21:38:22 UTC


README

PHP Tests passing or not

这是一个非常基础的库,提供了基于 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 文件应自动配置它们与此项目一起使用。