• Модуль: 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; }