public function _Authenticate($id, $login, $jid, $provider = "", $resource = "") { $id = intval($id); $this->authenticated = false; if ($id <= 0 || strlen($login) <= 0 || strlen($jid) <= 0) { return false; } $this->id = $id; $this->login = $login; $this->provider = $provider; $this->jid = strtolower($jid); $this->resource = $resource; $server = CXMPPServer::GetServer(); $server->_IndexClient($this->jid, $this->xmppId, $this->GetClientDomain()); $this->authenticated = true; CXMPPUtility::Show("Authenticate " . $this->jid . " (" . $this->xmppId . ")", 5); $this->ChangeWorkPresence("Authenticate", ""); CXMPPClient::SetLastActivityDate($this->id, time(), true); return true; }
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($b = "LOGIN", $o = "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; } }