Add Connection::onCallback, chain callbacks onClose
This commit is contained in:
@@ -27,6 +27,11 @@ abstract class Connection
|
|||||||
{
|
{
|
||||||
private Stream $stream;
|
private Stream $stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var callable
|
||||||
|
*/
|
||||||
|
private $onConnectCallback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var callable
|
* @var callable
|
||||||
*/
|
*/
|
||||||
@@ -38,7 +43,17 @@ abstract class Connection
|
|||||||
private LoggerInterface $logger,
|
private LoggerInterface $logger,
|
||||||
) {
|
) {
|
||||||
$this->stream = new NullStream();
|
$this->stream = new NullStream();
|
||||||
$this->onCloseCallback = static function () {
|
$this->onConnectCallback = static function () use ($logger, $address) {
|
||||||
|
$logger->debug('Connected.', [
|
||||||
|
'class' => static::class,
|
||||||
|
'address' => $address,
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
$this->onCloseCallback = static function () use ($logger, $address) {
|
||||||
|
$logger->debug('Disconnected.', [
|
||||||
|
'class' => static::class,
|
||||||
|
'address' => $address,
|
||||||
|
]);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,6 +137,8 @@ abstract class Connection
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->stream = $stream;
|
$this->stream = $stream;
|
||||||
|
|
||||||
|
($this->onConnectCallback)();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,9 +181,24 @@ abstract class Connection
|
|||||||
($this->onCloseCallback)();
|
($this->onCloseCallback)();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function onConnect(callable $callback): static
|
||||||
|
{
|
||||||
|
$previous = $this->onConnectCallback;
|
||||||
|
$this->onConnectCallback = static function () use ($previous, $callback) {
|
||||||
|
$previous();
|
||||||
|
$callback();
|
||||||
|
};
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function onClose(callable $callback): static
|
public function onClose(callable $callback): static
|
||||||
{
|
{
|
||||||
$this->onCloseCallback = $callback;
|
$previous = $this->onCloseCallback;
|
||||||
|
$this->onCloseCallback = static function () use ($previous, $callback) {
|
||||||
|
$previous();
|
||||||
|
$callback();
|
||||||
|
};
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user