allejo / bzflag-networking.php
用于解包 BZFlag 网络数据包的库
Requires
- php: >=7.1
- ext-json: *
- ext-zlib: *
- mossadal/math-parser: ^1.3
- symfony/deprecation-contracts: ^2.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.3
- kubawerlos/php-cs-fixer-custom-fixers: ^3.10
- maciejczyzewski/bottomline: ^0.2.0
- pepakriz/phpstan-exception-rules: ^0.12.0
- phpstan/phpstan: ^1.5.4
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2024-09-18 10:07:00 UTC
README
A PHP 7.1+ library for reading and handling BZFlag network packets.
BZFlag 回放文件只是简单地将原始数据包存储在文件中,因此此库可以让您读取回放文件并将它们解包成可以序列化为 JSON 的 PHP 类。
安装
此项目可通过 Composer 获取。
composer require allejo/bzflag-networking.php
相关库
allejo/bzflag-rendering.php
: 一个用于从此包提供的类中绘制 BZFlag 世界雷达图像的库
使用方法
此库拥有解包 BZFlag 网络数据包和世界数据包的所有工具。然而,此库中可用的便捷方法仅限于从回放文件中读取这些数据包。
分析回放数据包
此库的推荐使用方法是使用 getPacketsIterable()
方法在代码中“流”回放,该方法一次读取并生成一个数据包。这允许您一次性遍历回放文件,而无需在处理时将整个回放存储在内存中。
use allejo\bzflag\replays\Replay; $replay = new Replay(__DIR__ . '/my-bz-replay.rec'); foreach ($replay->getPacketsIterable() as $packet) { // do something with $packet }
如果您想将回放文件的所有数据包作为数组获取,请使用 getPacketsAsArray()
方法。请注意,这将导致高内存使用,因为整个回放将以展开的格式存储在内存中。此外,将读取所有数据包,如果您的代码需要执行任何类型的分析,您将需要再次遍历 所有 数据包。
use allejo\bzflag\networking\Packets\GamePacket; /** @var GamePacket[] $packets */ $packets = $replay->getPacketsAsArray();
回放中的嵌入式世界
从版本 1.1+ 开始,此库支持从回放文件中提取嵌入的世界数据。BZFlag 世界数据库不是容易导航的对象,它包含许多具有纹理、障碍物、世界武器等清单的“管理器”。
请参阅 allejo/bzflag-rendering.php
库的示例用法,了解如何导航世界数据库。
use allejo\bzflag\replays\Replay; use allejo\bzflag\world\WorldDatabase; $replay = new Replay(__DIR__ . '/my-bz-replay.rec'); /** @var WorldDatabase $worldDB */ $worldDB = $replay->getHeader()->getWorldDatabase(); // or an convenience method exists too $worldDB = $replay->getWorldDatabase();
导出到 JSON
⚠️ 高内存使用
PHP 内置的
json_encode
函数无法处理从回放写入大型 JSON 文件。在此阶段,您需要使用类似streaming-json-encoder
的东西来流式传输您的 JSON。请参阅 rrlog 的 PHP 端口 以获取示例用法。
use allejo\bzflag\replays\Replay; $replay = new Replay(__DIR__ . '/my-bz-replay.rec'); $json = json_encode($replay, JSON_PRETTY_PRINT); file_put_contents(__DIR__ . '/my-bz-replay.rec.json', $json);
其他语言
此库最初在几种其他语言中编写了几次,但功能较少。然而,那些其他项目现在已经结束,此项目已经取代了它们。