Difference between revisions of "XMPPHP"

From JaWiki (Jabber/XMPP wiki)
Jump to: navigation, search
(Undo revision 11795 by 95.30.205.253 (Talk))
Line 12: Line 12:
  
 
{{fixme|так есть там или нет поддержка ростера? я что-то не понял. [[User:Vindicar|Vindicar]] 13:55, 11 April 2009 (GMT)}}
 
{{fixme|так есть там или нет поддержка ростера? я что-то не понял. [[User:Vindicar|Vindicar]] 13:55, 11 April 2009 (GMT)}}
 
class Roster {
 
/**
 
* Roster array, handles contacts and presence.  Indexed by jid.
 
* Contains array with potentially two indexes 'contact' and 'presence'
 
* @var array
 
*/
 
protected $roster_array = array();
 
/**
 
* Constructor
 
*
 
*/
 
public function __construct($roster_array = array()) {
 
if ($this->verifyRoster($roster_array)) {
 
$this->roster_array = $roster_array; //Allow for prepopulation with existing roster
 
} else {
 
$this->roster_array = array();
 
}
 
}
 
 
/**
 
*
 
* Check that a given roster array is of a valid structure (empty is still valid)
 
*
 
* @param array $roster_array
 
*/
 
protected function verifyRoster($roster_array) {
 
#TODO once we know *what* a valid roster array looks like
 
return True;
 
}
 
 
/**
 
*
 
* Add given contact to roster
 
*
 
* @param string $jid
 
* @param string $subscription
 
* @param string $name
 
* @param array $groups
 
*/
 
public function addContact($jid, $subscription, $name='', $groups=array()) {
 
$contact = array('jid' => $jid, 'subscription' => $subscription, 'name' => $name, 'groups' => $groups);
 
if ($this->isContact($jid)) {
 
$this->roster_array[$jid]['contact'] = $contact;
 
} else {
 
$this->roster_array[$jid] = array('contact' => $contact);
 
}
 
}
 
 
/**
 
*
 
* Retrieve contact via jid
 
*
 
* @param string $jid
 
*/
 
public function getContact($jid) {
 
if ($this->isContact($jid)) {
 
return $this->roster_array[$jid]['contact'];
 
}
 
}
 
 
/**
 
*
 
* Discover if a contact exists in the roster via jid
 
*
 
* @param string $jid
 
*/
 
public function isContact($jid) {
 
return (array_key_exists($jid, $this->roster_array));
 
}
 
 
/**
 
*
 
* Set presence
 
*
 
* @param string $presence
 
* @param integer $priority
 
* @param string $show
 
* @param string $status
 
*/
 
public function setPresence($presence, $priority, $show, $status) {
 
list($jid, $resource) = split("/", $presence);
 
if ($show != 'unavailable') {
 
if (!$this->isContact($jid)) {
 
$this->addContact($jid, 'not-in-roster');
 
}
 
$resource = $resource ? $resource : '';
 
$this->roster_array[$jid]['presence'][$resource] = array('priority' => $priority, 'show' => $show, 'status' => $status);
 
} else { //Nuke unavailable resources to save memory
 
unset($this->roster_array[$jid]['resource'][$resource]);
 
}
 
}
 
 
/*
 
*
 
* Return best presence for jid
 
*
 
* @param string $jid
 
*/
 
public function getPresence($jid) {
 
$split = split("/", $jid);
 
$jid = $split[0];
 
if($this->isContact($jid)) {
 
$current = array('resource' => '', 'active' => '', 'priority' => -129, 'show' => '', 'status' => ''); //Priorities can only be -128 = 127
 
foreach($this->roster_array[$jid]['presence'] as $resource => $presence) {
 
//Highest available priority or just highest priority
 
if ($presence['priority'] > $current['priority'] and (($presence['show'] == "chat" or $presence['show'] == "available") or ($current['show'] != "chat" or $current['show'] != "available"))) {
 
$current = $presence;
 
$current['resource'] = $resource;
 
}
 
}
 
return $current;
 
}
 
}
 
/**
 
*
 
* Get roster
 
*
 
*/
 
public function getRoster() {
 
return $this->roster_array;
 
}
 

Revision as of 21:12, 1 June 2010

Информации мало или она отсутствует

Пока в данной статье мало информации. Приносим извинения.

Если вы хотите написать по теме, — сделайте это.

XMPPPHP
Информация
Адрес: http://code.google.com/p/xmpphp/
Автор: Nathan Fritz
Язык: PHP
Лицензия: GNU General Public License v2
Реализация стандартов
Ростер: поддерживается
Использование
Программы, использующие XMPPPHP

XMPPHP - класс на PHP5, являющийся наследником Class.jabber.php.Question.gifПроверить: так есть там или нет поддержка ростера? я что-то не понял. Vindicar 13:55, 11 April 2009 (GMT)