Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
	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;
	}
Esempio n. 5
0
 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();";
 }