kadet / nucleus
PHP的异步XMPP库
Requires
- php: >=7.0
- evenement/evenement: 2.0.*
- fabiang/sasl: dev-rspauth
- kadet/keylighter: ^0.8
- php-di/php-di: ^5.3
- psr/log: 1.0.*
- react/event-loop: ^0.4
- react/stream: ^0.4.3
Requires (Dev)
- bramus/monolog-colored-line-formatter: ~2.0
- monolog/monolog: ^1.20
- php-mock/php-mock-phpunit: 1.1.*
- phpunit/phpunit: >=5.4 <6.0.0
This package is auto-updated.
Last update: 2024-08-29 02:06:30 UTC
README
[进行中] Nucleus - PHP的XMPP库
基于React PHP的PHP异步XMPP库。
该库仍在开发中,因此不建议使用。它已废弃我的旧kadet/xmpp
包。
已可用
模块化客户端类
按照设计,客户端类(\Kadet\Xmpp\XmppClient
)像流一样用于在网络中发送和接收数据包,同时充当事件发射器来通知事件,并且作为依赖容器(这是一种对SRP的奇妙违反)来管理模块。它允许将几乎所有逻辑移动到适当的可交换组件中。
基本客户端实例可以非常容易地设置
$loop = React\EventLoop\Factory::create(); $client = new \Kadet\Xmpp\XmppClient(new \Kadet\Xmpp\Jid('local@domain.tld/resource'), [ 'loop' => $loop, 'password' => 'epicpasspeoem', ]); // Event declatation ... $client->connect(); $loop->run();
传递给第二个参数的选项与C#的属性实例化等效,因此上面的示例与调用相同
$client = new \Kadet\Xmpp\XmppClient(new \Kadet\Xmpp\Jid('local@domain.tld/resource')); $client->loop = $loop; $client->password = 'epicpasspoem';
除了modules
和default-modules
,它们用于初始模块设置。您可以通过将default-modules
设置为false来禁用默认模块,但出于非测试目的,强烈不建议这样做。
可用的事件有
element(Kadet\Xmpp\Xml\XmlElement $element) // element received features(Kadet\Xmpp\StreamFeatures $features) // features received send.element(Kadet\Xmpp\Xml\XmlElement $element) // element sent send.text(string $data) // some text (non valid XmlElement) sent stream.open(Kadet\Xmpp\Xml\XmlElement $stream) // Stream started stream.close() // Stream closed stream.error(Kadet\Xmpp\Stream\Error $error) // Stream errored connect(StreamDuplexInterface $stream) // called when connection is ready exception(Exception $exception) // called when otherwise unhandled exception happens
此外,所有来自react/stream
的默认事件都适用。
TLS处理
大多数XMPP服务器需要TLS连接,默认情况下React流不支持加密。如果底层流实现了\Kadet\Xmpp\Network\SecureStream
接口(提供的流类如\Kadet\Xmpp\Network\TcpStream
默认实现了该接口),则库将处理加密。
(更好的)事件API
Nucleus使用evenement/evenement
的扩展版本来提供方便的EventEmitter
API。因此,您现在可以根据谓词过滤事件,并且事件队列是优先级排序的。
$emitter->on($event, $callback, $predicate = null, $priority = 0);
谓词以及回调函数都使用传递给事件的事件参数调用。有几个默认谓词可供使用,您可以在Utils/Filter.php
中找到它们。
// Will fire event only if element belongs into self::TLS_NAMESPACE. $stream->on('element', $callable, with\xmlns(self::TLS_NAMESPACE));
您还可以优先排序事件
$stream->on('element', $second, null, 0); $stream->on('element', $first, null, 1); // will fire first
默认情况下不提供发送者参数,如果需要,您必须部分应用函数,每个事件发射类中也有快捷方式。
$stream->on('element', $stream->reference($callable)); // Will fire $callable($stream, ...$arguments);
事件队列可以通过事件返回false
来停止。
要完成的事情
请查看Trello上的路线图,我会保持更新。项目是按照里程碑系统创建的,这意味着在每个里程碑完成后API应该稳定 - 但目前尚无保证。