1C-Bitrix
25.700.0
Загрузка...
Поиск...
Не найдено
DbStorage.php
См. документацию.
1
<?php
2
3
declare(strict_types=1);
4
5
namespace
Bitrix\Main\Messenger\Internals\Storage\Db
;
6
7
use
Bitrix\Main\Application
;
8
use
Bitrix\Main\Messenger\Entity\MessageBox
;
9
use
Bitrix\Main\Messenger\Entity\MessageBoxCollection
;
10
use
Bitrix\Main\Messenger\Internals\Exception\Storage\PersistenceException
;
11
use
Bitrix\Main\Messenger\Internals\Storage\Db\Model\MessageStatus
;
12
use
Bitrix\Main\Messenger\Internals\Storage\StorageInterface
;
13
use
Bitrix\Main\ORM\Entity
;
14
use
Bitrix\Main\SystemException
;
15
16
class
DbStorage
implements
StorageInterface
17
{
18
private
const
LOCK_KEY =
'queueLock'
;
19
20
private
const
LOCK_TIMEOUT = 0;
21
22
private
MessageRepository
$repository;
23
24
private
static
bool
$locked;
25
26
public
function
__construct
(
Entity
$tableEntity)
27
{
28
$this->repository =
new
MessageRepository
($tableEntity);
29
}
30
31
public
function
__destruct
()
32
{
33
$this->unlock();
34
}
35
40
public
function
getOneByQueue
(
string
$queueId): ?
MessageBox
41
{
42
if
(!$this->lock())
43
{
44
return
null
;
45
}
46
47
$messageBox = $this->repository->getOneByQueue($queueId);
48
49
if
($messageBox !==
null
)
50
{
51
$this->repository->updateStatus(
new
MessageBoxCollection
($messageBox), MessageStatus::Processing);
52
}
53
54
return
$messageBox;
55
}
56
61
public
function
getReadyMessagesOfQueue
(
string
$queueId,
int
$limit = 500): iterable
62
{
63
if
(!$this->lock())
64
{
65
return
[];
66
}
67
68
$messageBoxes = $this->repository->getReadyMessagesOfQueue($queueId, $limit);
69
70
$this->repository->updateStatus($messageBoxes, MessageStatus::Processing);
71
72
return
$messageBoxes;
73
}
74
78
public
function
save
(
MessageBox
$messageBox): void
79
{
80
$this->repository->save($messageBox);
81
}
82
86
public
function
delete
(
MessageBox
$messageBox): void
87
{
88
$this->repository->delete($messageBox);
89
}
90
91
private
function
lock(): bool
92
{
93
if
(isset(self::$locked))
94
{
95
return
self::$locked;
96
}
97
98
return
self::$locked =
Application::getConnection
()->lock(self::LOCK_KEY, self::LOCK_TIMEOUT);
99
}
100
101
private
function
unlock(): void
102
{
103
Application::getConnection
()->unlock(self::LOCK_KEY);
104
105
self::$locked =
false
;
106
}
107
111
public
function
unlockStaleMessages
(): void
112
{
113
$messageBoxes = $this->repository->getStaleMessages();
114
115
$this->repository->updateStatus($messageBoxes, MessageStatus::New);
116
}
117
}
Bitrix\Main\Application
Определения
application.php:30
Bitrix\Main\Application\getConnection
static getConnection($name="")
Определения
application.php:638
Bitrix\Main\Messenger\Entity\MessageBoxCollection
Определения
MessageBoxCollection.php:11
Bitrix\Main\Messenger\Entity\MessageBox
Определения
MessageBox.php:16
Bitrix\Main\Messenger\Internals\Exception\Storage\PersistenceException
Определения
PersistenceException.php:10
Bitrix\Main\Messenger\Internals\Storage\Db\DbStorage
Определения
DbStorage.php:17
Bitrix\Main\Messenger\Internals\Storage\Db\DbStorage\__destruct
__destruct()
Определения
DbStorage.php:31
Bitrix\Main\Messenger\Internals\Storage\Db\DbStorage\getReadyMessagesOfQueue
getReadyMessagesOfQueue(string $queueId, int $limit=500)
Определения
DbStorage.php:61
Bitrix\Main\Messenger\Internals\Storage\Db\DbStorage\getOneByQueue
getOneByQueue(string $queueId)
Определения
DbStorage.php:40
Bitrix\Main\Messenger\Internals\Storage\Db\DbStorage\__construct
__construct(Entity $tableEntity)
Определения
DbStorage.php:26
Bitrix\Main\Messenger\Internals\Storage\Db\DbStorage\save
save(MessageBox $messageBox)
Определения
DbStorage.php:78
Bitrix\Main\Messenger\Internals\Storage\Db\DbStorage\unlockStaleMessages
unlockStaleMessages()
Определения
DbStorage.php:111
Bitrix\Main\Messenger\Internals\Storage\Db\MessageRepository
Определения
MessageRepository.php:21
Bitrix\Main\SystemException
Определения
SystemException.php:9
Bitrix\Main\Messenger\Internals\Storage\StorageInterface
Определения
StorageInterface.php:10
Bitrix\Main\Entity
Определения
ufield.php:9
Bitrix\Main\Messenger\Internals\Storage\Db\Model\MessageStatus
MessageStatus
Определения
MessageStatus.php:8
Bitrix\Main\Messenger\Internals\Storage\Db
Определения
DbStorage.php:5
bitrix
modules
main
lib
Messenger
Internals
Storage
Db
DbStorage.php
Создано системой
1.14.0