public static function AddByChannel($channelId, $arParams = array()) { global $DB; if (!is_array($channelId)) { $channelId = array($channelId); } if (strlen($arParams['module_id']) > 0 || strlen($arParams['command']) > 0) { $arData = array('module_id' => $arParams['module_id'], 'command' => $arParams['command'], 'params' => is_array($arParams['params']) ? $arParams['params'] : array()); if (CPullOptions::GetQueueServerStatus()) { $command = array('MESSAGE' => array($arData), 'ERROR' => ''); if (!is_array($channelId) && CPullOptions::GetQueueServerVersion() == 1) { $command['CHANNEL_ID'] = $channelId; } $message = CUtil::PhpToJsObject($command); if (!defined('BX_UTF') || !BX_UTF) { $message = $GLOBALS['APPLICATION']->ConvertCharset($message, SITE_CHARSET, 'utf-8'); } $res = CPullChannel::Send($channelId, str_replace("\n", " ", $message)); $result = $res ? true : false; } else { foreach ($channelId as $channel) { $arParams = array('CHANNEL_ID' => $channel, 'MESSAGE' => str_replace("\n", " ", serialize($arData)), '~DATE_CREATE' => $DB->CurrentTimeFunction()); $res = IntVal($DB->Add("b_pull_stack", $arParams, array("MESSAGE"))); $result = $res ? true : false; } } if (isset($arParams['push_text']) && strlen($arParams['push_text']) > 0 && isset($arParams['push_user']) && intval($arParams['push_user']) > 0) { $CPushManager = new CPushManager(); $CPushManager->AddQueue(array('USER_ID' => $arParams['push_user'], 'MESSAGE' => str_replace("\n", " ", $arParams['push_text']), 'PARAMS' => $arParams['push_params'], 'BADGE' => isset($arParams['push_badge']) ? intval($arParams['push_badge']) : '', 'TAG' => isset($arParams['push_tag']) ? $arParams['push_tag'] : '', 'SUB_TAG' => isset($arParams['push_sub_tag']) ? $arParams['push_sub_tag'] : '', 'APP_ID' => isset($arParams['push_app_id']) ? $arParams['push_app_id'] : '')); } return $result; } return false; }
public static function AddByChannel($channelId, $arParams = array()) { global $DB; if (!is_array($channelId)) { $channelId = array($channelId); } $result = false; if (strlen($arParams['module_id']) > 0 || strlen($arParams['command']) > 0) { $arData = array('module_id' => $arParams['module_id'], 'command' => $arParams['command'], 'params' => is_array($arParams['params']) ? $arParams['params'] : array()); if (CPullOptions::GetQueueServerStatus()) { $command = array('SERVER_TIME_WEB' => time(), 'SERVER_NAME' => COption::GetOptionString('main', 'server_name', $_SERVER['SERVER_NAME']), 'MESSAGE' => array($arData), 'ERROR' => ''); if (!is_array($channelId) && CPullOptions::GetQueueServerVersion() == 1) { $command['CHANNEL_ID'] = $channelId; } $message = CUtil::PhpToJsObject($command); if (!defined('BX_UTF') || !BX_UTF) { $message = $GLOBALS['APPLICATION']->ConvertCharset($message, SITE_CHARSET, 'utf-8'); } $options = isset($arParams['expiry']) ? array('expiry' => intval($arParams['expiry'])) : array(); $res = CPullChannel::Send($channelId, str_replace("\n", " ", $message), $options); $result = $res ? true : false; } else { foreach ($channelId as $channel) { $arParams = array('CHANNEL_ID' => $channel, 'MESSAGE' => str_replace("\n", " ", serialize($arData)), '~DATE_CREATE' => $DB->CurrentTimeFunction()); $res = IntVal($DB->Add("b_pull_stack", $arParams, array("MESSAGE"))); $result = $res ? true : false; } } return $result; } return false; }
public static function AddByChannel($channelId, $arParams = Array()) { global $DB; if (strlen($arParams['module_id']) > 0 || strlen($arParams['command']) > 0) { $arData = Array( 'module_id' => $arParams['module_id'], 'command' => $arParams['command'], 'params' => is_array($arParams['params'])? $arParams['params']: Array(), ); if (CPullOptions::GetNginxStatus()) { $message = CUtil::PhpToJsObject(Array('CHANNEL_ID' => $channelId, 'MESSAGE' => Array($arData), 'ERROR' => '')); if (!defined('BX_UTF') || !BX_UTF) $message = $GLOBALS['APPLICATION']->ConvertCharset($message, SITE_CHARSET,'utf-8'); $result = CPullChannel::Send($channelId, str_replace("\n", " ", $message)); } else { $arParams = Array( 'CHANNEL_ID' => $channelId, 'MESSAGE' => str_replace("\n", " ", serialize($arData)), '~DATE_CREATE' => $DB->CurrentTimeFunction(), ); $id = IntVal($DB->Add("b_pull_stack", $arParams, Array("MESSAGE"))); $result = $id? '{"channel": "'.$channelId.'", "id": "'.$id.'"}': false; } if (isset($arParams['push_text']) && strlen($arParams['push_text'])>0 && isset($arParams['push_user']) && intval($arParams['push_user'])>0) { $CPushManager = new CPushManager(); $CPushManager->AddQueue(Array( 'USER_ID' => $arParams['push_user'], 'MESSAGE' => str_replace("\n", " ", $arParams['push_text']), 'PARAMS' => $arParams['push_params'], 'BADGE' => isset($arParams['push_badge'])? intval($arParams['push_badge']): '', 'TAG' => isset($arParams['push_tag'])? $arParams['push_tag']: '', 'SUB_TAG' => isset($arParams['push_sub_tag'])? $arParams['push_sub_tag']: '', 'APP_ID' => isset($arParams['push_app_id'])? $arParams['push_app_id']: '', )); } return $result; } return false; }
public static function OnAfterUserLogout($arParams) { if (!CPullOptions::GetQueueServerStatus()) return false; if ($arParams['USER_ID'] <= 0) return false; $arParams['USER_ID'] = intval($arParams['USER_ID']); if (isset($_SESSION['USER_LAST_LOGOUT_'.$arParams['USER_ID']]) && intval($_SESSION['USER_LAST_LOGOUT_'.$arParams['USER_ID']])+100 > time()) return false; $_SESSION['USER_LAST_LOGOUT_'.$arParams['USER_ID']] = time(); unset($_SESSION['USER_LAST_AUTH_'.$arParams['USER_ID']]); $arChannel = CPullChannel::GetChannel($arParams['USER_ID']); $result = CPullChannel::Send($arChannel['CHANNEL_ID'], 'ping', 'GET', 5, false); if (is_object($result) && isset($result->infos[0])) { $sendOffline = $result->infos[0]->subscribers > 0? false: true; } else { $sendOffline = true; } if ($sendOffline) { CPullStack::AddShared(Array( 'module_id' => 'online', 'command' => 'user_offline', 'params' => Array( 'USER_ID' => $arParams['USER_ID'] ), )); } return true; }
public static function CheckOnlineChannel() { if (!CPullOptions::GetQueueServerStatus()) { return false; } global $DB; $arUser = array(); $sqlDateFunction = null; $dbType = strtolower($DB->type); if ($dbType == "mysql") { $sqlDateFunction = "DATE_SUB(NOW(), INTERVAL 13 HOUR)"; } else { if ($dbType == "mssql") { $sqlDateFunction = "dateadd(HOUR, -13, getdate())"; } else { if ($dbType == "oracle") { $sqlDateFunction = "SYSDATE-1/13"; } } } if (!is_null($sqlDateFunction)) { $strSql = "\n\t\t\t\t\tSELECT USER_ID, CHANNEL_ID, CHANNEL_TYPE\n\t\t\t\t\tFROM b_pull_channel\n\t\t\t\t\tWHERE DATE_CREATE >= " . $sqlDateFunction; $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); while ($arRes = $dbRes->Fetch()) { $arUser[$arRes['CHANNEL_ID']] = $arRes['USER_ID']; } } if (count($arUser) > 0) { $arOnline = array(); $arOffline = array(); global $USER; $agentUserId = 0; if (is_object($USER) && $USER->GetId() > 0) { $agentUserId = $USER->GetId(); $arOnline[$agentUserId] = $agentUserId; } $arOnline = array(); $result = CPullChannel::Send(array_keys($arUser), 'ping', 'GET', 5, false); if (is_object($result) && isset($result->infos)) { foreach ($result->infos as $info) { $userId = $arUser[$info->channel]; if ($userId <= 0 || $agentUserId == $userId) { continue; } if ($info->subscribers > 0) { $arOnline[$userId] = $userId; } else { $arOffline[$userId] = $userId; } } } if (count($arOnline) > 0) { ksort($arOnline); CUser::SetLastActivityDateByArray($arOnline); } } $arSend = array(); if (CModule::IncludeModule('im')) { $ar = CIMStatus::GetList(); $arSend = $ar['users']; } else { $dbUsers = CUser::GetList($sort_by = 'ID', $sort_dir = 'asc', array('LAST_ACTIVITY' => '180'), array('FIELDS' => array("ID"))); while ($arUser = $dbUsers->Fetch()) { $arSend[$arUser["ID"]] = array('id' => $arUser["ID"], 'status' => 'online', 'idle' => 0); } } CPullStack::AddShared(array('module_id' => 'online', 'command' => 'online_list', 'params' => array('USERS' => $arSend))); return "CPullChannel::CheckOnlineChannel();"; }