vendor/gos/web-socket-bundle/src/Client/ClientStorage.php line 18

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Gos\Bundle\WebSocketBundle\Client;
  3. use Gos\Bundle\WebSocketBundle\Client\Driver\DriverInterface;
  4. use Gos\Bundle\WebSocketBundle\Client\Exception\ClientNotFoundException;
  5. use Gos\Bundle\WebSocketBundle\Client\Exception\StorageException;
  6. use Psr\Log\LoggerAwareInterface;
  7. use Psr\Log\LoggerAwareTrait;
  8. use Ratchet\ConnectionInterface;
  9. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  10. trigger_deprecation('gos/web-socket-bundle''3.11''The "%s" class is deprecated and will be removed in 4.0, use the new websocket authentication API instead.'ClientStorage::class);
  11. /**
  12.  * @deprecated to be removed in 4.0, use the new websocket authentication API instead
  13.  */
  14. final class ClientStorage implements ClientStorageInterfaceLoggerAwareInterface
  15. {
  16.     use LoggerAwareTrait;
  17.     private DriverInterface $driver;
  18.     private int $ttl;
  19.     public function __construct(DriverInterface $driverint $ttl)
  20.     {
  21.         $this->driver $driver;
  22.         $this->ttl $ttl;
  23.     }
  24.     /**
  25.      * @throws ClientNotFoundException if the specified client could not be found
  26.      * @throws StorageException        if the client could not be read from storage
  27.      */
  28.     public function getClient(string $identifier): TokenInterface
  29.     {
  30.         try {
  31.             $result $this->driver->fetch($identifier);
  32.         } catch (\Exception $e) {
  33.             throw new StorageException(sprintf('Driver %s failed'self::class), $e->getCode(), $e);
  34.         }
  35.         if (null !== $this->logger) {
  36.             $this->logger->debug('GET CLIENT '.$identifier);
  37.         }
  38.         if (false === $result) {
  39.             throw new ClientNotFoundException(sprintf('Client %s not found'$identifier));
  40.         }
  41.         return unserialize($result);
  42.     }
  43.     public function getStorageId(ConnectionInterface $conn): string
  44.     {
  45.         return (string) $conn->resourceId;
  46.     }
  47.     /**
  48.      * @throws StorageException if the client could not be saved to storage
  49.      */
  50.     public function addClient(string $identifierTokenInterface $token): void
  51.     {
  52.         $serializedUser serialize($token);
  53.         if (null !== $this->logger) {
  54.             $context = [
  55.                 'token' => $token,
  56.                 'username' => method_exists($token'getUserIdentifier') ? $token->getUserIdentifier() : $token->getUsername(),
  57.             ];
  58.             $this->logger->debug('INSERT CLIENT '.$identifier$context);
  59.         }
  60.         try {
  61.             $result $this->driver->save($identifier$serializedUser$this->ttl);
  62.         } catch (\Exception $e) {
  63.             throw new StorageException(sprintf('Driver %s failed'self::class), $e->getCode(), $e);
  64.         }
  65.         if (false === $result) {
  66.             $username method_exists($token'getUserIdentifier') ? $token->getUserIdentifier() : $token->getUsername();
  67.             throw new StorageException(sprintf('Unable to add client "%s" to storage'$username));
  68.         }
  69.     }
  70.     /**
  71.      * @throws StorageException if there was an error reading from storage
  72.      */
  73.     public function hasClient(string $identifier): bool
  74.     {
  75.         try {
  76.             return $this->driver->contains($identifier);
  77.         } catch (\Exception $e) {
  78.             throw new StorageException(sprintf('Driver %s failed'self::class), $e->getCode(), $e);
  79.         }
  80.     }
  81.     /**
  82.      * @throws StorageException if there was an error removing the client from storage
  83.      */
  84.     public function removeClient(string $identifier): bool
  85.     {
  86.         if (null !== $this->logger) {
  87.             $this->logger->debug('REMOVE CLIENT '.$identifier);
  88.         }
  89.         try {
  90.             return $this->driver->delete($identifier);
  91.         } catch (\Exception $e) {
  92.             throw new StorageException(sprintf('Driver %s failed'self::class), $e->getCode(), $e);
  93.         }
  94.     }
  95.     /**
  96.      * @throws StorageException if there was an error removing the clients from storage
  97.      */
  98.     public function removeAllClients(): void
  99.     {
  100.         if (!method_exists($this->driver'clear')) {
  101.             return;
  102.         }
  103.         if (null !== $this->logger) {
  104.             $this->logger->debug('REMOVE ALL CLIENTS');
  105.         }
  106.         try {
  107.             $this->driver->clear();
  108.         } catch (\Exception $e) {
  109.             throw new StorageException(sprintf('Driver %s failed'self::class), $e->getCode(), $e);
  110.         }
  111.     }
  112. }