- Модуль: pull
- Путь к файлу: ~/bitrix/modules/pull/classes/general/pull_push.php
- Класс: CPushManager
- Вызов: CPushManager::SendAgent
static function SendAgent()
{
global $DB;
if (!CPullOptions::GetPushStatus())
{
return false;
}
$count = 0;
$maxId = 0;
$pushLimit = 10;
$arPush = [];
$sqlDate = "";
if ($DB->type == "MYSQL")
{
$sqlDate = " WHERE DATE_CREATE < DATE_SUB(NOW(), INTERVAL 15 SECOND) ";
}
else
{
if ($DB->type == "MSSQL")
{
$sqlDate = " WHERE DATE_CREATE < dateadd(SECOND, -15, getdate()) ";
}
else
{
if ($DB->type == "ORACLE")
{
$sqlDate = " WHERE DATE_CREATE < SYSDATE-(1/24/60/60*15) ";
}
}
}
$strSql = $DB->TopSql("SELECT ID, USER_ID, MESSAGE, PARAMS, ADVANCED_PARAMS, BADGE, APP_ID FROM b_pull_push_queue" . $sqlDate, 280);
$dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "
Line: " . __LINE__);
while ($arRes = $dbRes->Fetch())
{
if ($arRes['BADGE'] == '')
{
$arRes['BADGE'] = BitrixPullMobileCounter::get($arRes['USER_ID']);
}
try
{
$arRes['PARAMS'] = $arRes['PARAMS'] ? BitrixMainWebJson::decode($arRes['PARAMS']) : "";
}
catch (Exception $e)
{
$arRes['PARAMS'] = "";
}
if (is_array($arRes['PARAMS']))
{
if (isset($arRes['PARAMS']['CATEGORY']))
{
$arRes['CATEGORY'] = $arRes['PARAMS']['CATEGORY'];
unset($arRes['PARAMS']['CATEGORY']);
}
$arRes['PARAMS'] = BitrixMainWebJson::encode($arRes['PARAMS']);
}
try
{
$arRes['ADVANCED_PARAMS'] = $arRes['ADVANCED_PARAMS'] != '' ? BitrixMainWebJson::decode($arRes['ADVANCED_PARAMS']) : [];
}
catch (Exception $e)
{
$arRes['ADVANCED_PARAMS'] = [];
}
$arPush[$count][] = $arRes;
if ($pushLimit <= count($arPush[$count]))
{
$count++;
}
$maxId = max($maxId, $arRes['ID']);
}
if ($maxId > 0)
{
$strSql = "DELETE FROM b_pull_push_queue WHERE ID <= " . $maxId;
$DB->Query($strSql, false, "File: " . __FILE__ . "
Line: " . __LINE__);
}
$CPushManager = new CPushManager();
foreach ($arPush as $arStack)
{
$CPushManager->SendMessage($arStack);
}
$strSql = "SELECT COUNT(ID) CNT FROM b_pull_push_queue";
$dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "
Line: " . __LINE__);
if ($arRes = $dbRes->Fetch())
{
global $pPERIOD;
if ($arRes['CNT'] > 280)
{
$pPERIOD = 10;
return "CPushManager::SendAgent();";
}
else
{
if ($arRes['CNT'] > 0)
{
$pPERIOD = 30;
return "CPushManager::SendAgent();";
}
}
}
return false;
}