]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - scripts/xmppdaemon.php
Fix error in xmpp help
[quix0rs-gnu-social.git] / scripts / xmppdaemon.php
index 77cfc1963ff9d221400c4b7c26d24208dfd9382a..e067fdcdb232ed30c3eb515ab4fd497aa4445068 100755 (executable)
@@ -29,6 +29,7 @@ define('LACONICA', true);
 
 require_once(INSTALLDIR . '/lib/common.php');
 require_once(INSTALLDIR . '/lib/jabber.php');
+require_once(INSTALLDIR . '/lib/daemon.php');
 
 set_error_handler('common_error_handler');
 
@@ -36,7 +37,7 @@ set_error_handler('common_error_handler');
 # in jabber.php, which create a new XMPP class. A more elegant (?) solution
 # might be to use make this a subclass of XMPP.
 
-class XMPPDaemon {
+class XMPPDaemon extends Daemon {
 
        function XMPPDaemon($resource=NULL) {
                static $attrs = array('server', 'port', 'user', 'password', 'host');
@@ -61,22 +62,39 @@ class XMPPDaemon {
 
                $this->log(LOG_INFO, "Connecting to $connect_to on port $this->port");
 
-               $this->conn = jabber_connect($this->resource, "Send me a message to post a notice", 100);
+               $this->conn = jabber_connect($this->resource);
 
                if (!$this->conn) {
                        return false;
                }
-
+               
+               $this->conn->setReconnectTimeout(600);
+               
+               jabber_send_presence("Send me a message to post a notice", 'available',
+                                                        NULL, 'available', 100);
                return !$this->conn->isDisconnected();
        }
 
-       function handle() {
-               $this->conn->addEventHandler('message', 'handle_message', $this);
-               $this->conn->addEventHandler('presence', 'handle_presence', $this);
-
-               $this->conn->process();
+       function name() {
+               return strtolower('xmppdaemon.'.$this->resource);
+       }
+       
+       function run() {
+               if ($this->connect()) {
+                       
+                       $this->conn->addEventHandler('message', 'handle_message', $this);
+                       $this->conn->addEventHandler('presence', 'handle_presence', $this);
+                       $this->conn->addEventHandler('reconnect', 'handle_reconnect', $this);
+                       
+                       $this->conn->process();
+               }
        }
 
+       function handle_reconnect(&$pl) {
+               $this->conn->processUntil('session_start');
+               $this->conn->presence('Send me a message to post a notice', 'available', NULL, 'available', 100);
+       }
+       
        function get_user($from) {
                $user = User::staticGet('jabber', jabber_normalize_jid($from));
                return $user;
@@ -127,6 +145,9 @@ class XMPPDaemon {
                        }
                        $this->add_notice($user, $pl);
                }
+               
+               $user->free();
+               unset($user);
        }
 
        function is_self($from) {
@@ -263,6 +284,8 @@ class XMPPDaemon {
                common_broadcast_notice($notice);
                $this->log(LOG_INFO,
                                   'Added notice ' . $notice->id . ' from user ' . $user->nickname);
+               $notice->free();
+               unset($notice);
        }
 
        function handle_presence(&$pl) {
@@ -292,6 +315,8 @@ class XMPPDaemon {
                                                           ' status from presence.');
                                        $this->add_notice($user, $pl);
                                }
+                               $user->free();
+                               unset($user);
                        }
                        break;
                }
@@ -306,12 +331,13 @@ class XMPPDaemon {
        }
 }
 
+ini_set("max_execution_time", "0");
+ini_set("max_input_time", "0");
+set_time_limit(0);
 mb_internal_encoding('UTF-8');
 
 $resource = ($argc > 1) ? $argv[1] : (common_config('xmpp','resource') . '-listen');
 
 $daemon = new XMPPDaemon($resource);
 
-if ($daemon->connect()) {
-       $daemon->handle();
-}
+$daemon->runOnce();