public function __construct($xmpp)
{
$this->xmpp = $xmpp;
$this->xmpp->xml->addXPathHandler('{jabber:client}presence', function ($xml) {
$payload = [];
$payload['type'] = isset($xml->attrs['type']) ? $xml->attrs['type'] : 'available';
$payload['show'] = isset($xml->sub('show')->data) ? $xml->sub('show')->data : $payload['type'];
$payload['from'] = $xml->attrs['from'];
$payload['status'] = isset($xml->sub('status')->data) ? $xml->sub('status')->data : '';
$payload['priority'] = isset($xml->sub('priority')->data) ? intval($xml->sub('priority')->data) : 0;
$payload['xml'] = $xml;
if ($payload['from'] === $this->xmpp->fulljid && $payload['type'] === 'unavailable') {
$this->xmpp->finish();
}
if ($this->track_presence) {
$this->setPresence($payload['from'], $payload['priority'], $payload['show'], $payload['status']);
}
//Daemon::log("Presence: {$payload['from']} [{$payload['show']}] {$payload['status']}");
if (array_key_exists('type', $xml->attrs) and $xml->attrs['type'] === 'subscribe') {
if ($this->auto_subscribe) {
$this->xmpp->sendXML("<presence type='subscribed' to='{$xml->attrs['from']}' from='{$this->xmpp->fulljid}' />");
$this->xmpp->sendXML("<presence type='subscribe' to='{$xml->attrs['from']}' from='{$this->xmpp->fulljid}' />");
}
$this->event('subscription_requested', $payload);
} elseif (array_key_exists('type', $xml->attrs) and $xml->attrs['type'] === 'subscribed') {
$this->event('subscription_accepted', $payload);
} else {
$this->event('presence', $payload);
}
});
$this->fetch();
}