123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php
- namespace Drupal\Core\Queue;
- /**
- * Static queue implementation.
- *
- * This allows "undelayed" variants of processes relying on the Queue
- * interface. The queue data resides in memory. It should only be used for
- * items that will be queued and dequeued within a given page request.
- *
- * @ingroup queue
- */
- class Memory implements QueueInterface {
- /**
- * The queue data.
- *
- * @var array
- */
- protected $queue;
- /**
- * Counter for item ids.
- *
- * @var int
- */
- protected $idSequence;
- /**
- * Constructs a Memory object.
- *
- * @param string $name
- * An arbitrary string. The name of the queue to work with.
- */
- public function __construct($name) {
- $this->queue = [];
- $this->idSequence = 0;
- }
- /**
- * {@inheritdoc}
- */
- public function createItem($data) {
- $item = new \stdClass();
- $item->item_id = $this->idSequence++;
- $item->data = $data;
- $item->created = time();
- $item->expire = 0;
- $this->queue[$item->item_id] = $item;
- return $item->item_id;
- }
- /**
- * {@inheritdoc}
- */
- public function numberOfItems() {
- return count($this->queue);
- }
- /**
- * {@inheritdoc}
- */
- public function claimItem($lease_time = 30) {
- foreach ($this->queue as $key => $item) {
- if ($item->expire == 0) {
- $item->expire = time() + $lease_time;
- $this->queue[$key] = $item;
- return $item;
- }
- }
- return FALSE;
- }
- /**
- * {@inheritdoc}
- */
- public function deleteItem($item) {
- unset($this->queue[$item->item_id]);
- }
- /**
- * {@inheritdoc}
- */
- public function releaseItem($item) {
- if (isset($this->queue[$item->item_id]) && $this->queue[$item->item_id]->expire != 0) {
- $this->queue[$item->item_id]->expire = 0;
- return TRUE;
- }
- return FALSE;
- }
- /**
- * {@inheritdoc}
- */
- public function createQueue() {
- // Nothing needed here.
- }
- /**
- * {@inheritdoc}
- */
- public function deleteQueue() {
- $this->queue = [];
- $this->idSequence = 0;
- }
- }
|