- Модуль: xmpp
- Путь к файлу: ~/bitrix/modules/xmpp/classes/server.php
- Класс: CXMPPServer
- Вызов: CXMPPServer::__ReportKernel
private function __ReportKernel()
{
foreach ($this->arClientsIndex as $clientDomain => $arDomainClientsIndex)
{
if (!CXMPPUtility::SelectDatabase($clientDomain))
continue;
if (count($arDomainClientsIndex) <= 0)
continue;
foreach ($arDomainClientsIndex as $jid => $arId)
{
foreach ($arId as $id)
{
if (array_key_exists($id, $this->arClients))
{
if ($this->arClients[$id]->IsConnected() && $this->arClients[$id]->IsAuthenticated())
{
$idTmp = $this->arClients[$id]->GetId();
CUser::SetLastActivityDate($idTmp);
CXMPPClient::SetLastActivityDate($idTmp);
}
}
}
}
$arOnlineOnSiteTmp = array();
$dbUsers = CUser::GetList(
"LOGIN",
"DESC",
array(
"ACTIVE" => "Y",
"LAST_ACTIVITY" => 600,
"!UF_DEPARTMENT" => false
),
array('FIELDS' => array('ID', 'LOGIN'))
);
while ($arUser = $dbUsers->Fetch())
$arOnlineOnSiteTmp[] = CXMPPUtility::GetJId($arUser, $clientDomain);
if (!is_array($this->arOnlineOnSite[$clientDomain]))
$this->arOnlineOnSite[$clientDomain] = array();
$arOffline = array_diff($this->arOnlineOnSite[$clientDomain], $arOnlineOnSiteTmp);
foreach ($arOffline as $jid)
{
if (!array_key_exists($jid, $this->arClientsIndex[$clientDomain])
|| array_key_exists($jid, $this->arClientsIndex[$clientDomain]) && count($this->arClientsIndex[$clientDomain][$jid]) <= 0)
{
$this->SendAll(
array(
"presence" => array(
"." => array(
"type" => "unavailable",
"from" => $jid,
),
),
)
);
}
}
$arOnline = array_diff($arOnlineOnSiteTmp, $this->arOnlineOnSite[$clientDomain]);
foreach ($arOnline as $jid)
{
if (!array_key_exists($jid, $this->arClientsIndex[$clientDomain])
|| array_key_exists($jid, $this->arClientsIndex[$clientDomain]) && count($this->arClientsIndex[$clientDomain][$jid]) <= 0)
$this->SendAll(
array(
"presence" => array(
"." => array(
"from" => $jid,
),
),
)
);
}
$this->arOnlineOnSite[$clientDomain] = $arOnlineOnSiteTmp;
}
}