-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQueue.php
More file actions
57 lines (47 loc) · 1.14 KB
/
Queue.php
File metadata and controls
57 lines (47 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
namespace Slowmove\SimplePhpQueue;
use Slowmove\SimplePhpQueue\Storage\StorageFactory;
use Slowmove\SimplePhpQueue\Storage\StorageInterface;
use Slowmove\SimplePhpQueue\Storage\StorageType;
class Queue
{
private StorageInterface $storage;
public function __construct(
StorageType $storage,
string $storagePath = "",
string $storageName = 'queue',
) {
$this->storage = StorageFactory::getStorage($storage, $storagePath, $storageName);
}
public function enqueue(string $data): bool
{
return $this->storage->enqueue($data);
}
public function dequeue(): ?string
{
return $this->storage->dequeue();
}
public function exist($value): bool
{
return $this->storage->exist($value);
}
public function listen(callable $fn, int $delayWhenEmpty = 5): void
{
$delaySeconds = $delayWhenEmpty;
while (true) {
if (($item = $this->dequeue()) !== null) {
$fn($item);
} else {
sleep($delaySeconds);
}
}
}
public function length(): int
{
return $this->storage->length();
}
public function content(): array
{
return $this->storage->content();
}
}