����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.170 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/thread-self/root/home/builderbox/./././public_html/vendor/pda/pheanstalk/src/ |
Upload File : |
<?php
namespace Pheanstalk;
use Pheanstalk\Contract\CommandInterface;
use Pheanstalk\Contract\ResponseInterface;
use Pheanstalk\Contract\SocketFactoryInterface;
use Pheanstalk\Contract\SocketInterface;
use Pheanstalk\Exception\ServerBadFormatException;
use Pheanstalk\Exception\ServerDrainingException;
use Pheanstalk\Exception\ServerInternalErrorException;
use Pheanstalk\Exception\ServerOutOfMemoryException;
use Pheanstalk\Exception\ServerUnknownCommandException;
use Pheanstalk\Response\ArrayResponse;
/**
* A connection to a beanstalkd server, backed by any type of socket.
*
*/
class Connection
{
const CRLF = "\r\n";
const CRLF_LENGTH = 2;
const DEFAULT_CONNECT_TIMEOUT = 2;
// responses which are global errors, mapped to their exception classes
private static $errorResponses = [
ResponseInterface::RESPONSE_OUT_OF_MEMORY => ServerOutOfMemoryException::class,
ResponseInterface::RESPONSE_INTERNAL_ERROR => ServerInternalErrorException::class,
ResponseInterface::RESPONSE_DRAINING => ServerDrainingException::class,
ResponseInterface::RESPONSE_BAD_FORMAT => ServerBadFormatException::class,
ResponseInterface::RESPONSE_UNKNOWN_COMMAND => ServerUnknownCommandException::class,
];
// responses which are followed by data
private static $dataResponses = [
ResponseInterface::RESPONSE_RESERVED,
ResponseInterface::RESPONSE_FOUND,
ResponseInterface::RESPONSE_OK,
];
/**
* @var SocketFactoryInterface
*/
private $factory;
/**
* @var ?SocketInterface
*/
private $socket;
public function __construct(SocketFactoryInterface $factory)
{
$this->factory = $factory;
}
/**
* Disconnect the socket.
* Subsequent socket operations will create a new connection.
*/
public function disconnect()
{
if (isset($this->socket)) {
$this->socket->disconnect();
$this->socket = null;
}
}
/**
* @throws Exception\ClientException
*/
public function dispatchCommand(CommandInterface $command): ArrayResponse
{
$socket = $this->getSocket();
$to_send = $command->getCommandLine().self::CRLF;
if ($command->hasData()) {
$to_send .= $command->getData().self::CRLF;
}
$socket->write($to_send);
$responseLine = $socket->getLine();
$responseName = preg_replace('#^(\S+).*$#s', '$1', $responseLine);
if (isset(self::$errorResponses[$responseName])) {
$exceptionClass = self::$errorResponses[$responseName];
throw new $exceptionClass(sprintf(
"%s in response to '%s'",
$responseName,
$command->getCommandLine()
));
}
if (in_array($responseName, self::$dataResponses)) {
$dataLength = preg_replace('#^.*\b(\d+)$#', '$1', $responseLine);
$data = $socket->read((int) $dataLength);
$crlf = $socket->read(self::CRLF_LENGTH);
if ($crlf !== self::CRLF) {
throw new Exception\ClientException(sprintf(
'Expected %u bytes of CRLF after %u bytes of data',
self::CRLF_LENGTH,
$dataLength
));
}
} else {
$data = null;
}
return $command
->getResponseParser()
->parseResponse($responseLine, $data);
}
// ----------------------------------------
/**
* Socket handle for the connection to beanstalkd.
*
* @throws Exception\ConnectionException
*
* @return SocketInterface
*/
private function getSocket()
{
if (!isset($this->socket)) {
$this->socket = $this->factory->create();
}
return $this->socket;
}
}