示例#1
0
 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;
 }
示例#2
0
 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;
     }
 }