define('CLAIM_TIMEOUT', 1200);
-class QueueHandler {
+if (!defined('LACONICA')) { exit(1); }
+
+require_once(INSTALLDIR.'/lib/daemon.php');
+require_once(INSTALLDIR.'/classes/Queue_item.php');
+require_once(INSTALLDIR.'/classes/Notice.php');
+
+class QueueHandler extends Daemon {
var $_id = 'generic';
function class_name() {
return ucfirst($this->transport()) . 'Handler';
}
+
+ function name() {
+ return strtolower($this->class_name().'.'.$this->get_id());
+ }
function get_id() {
return $this->_id;
return true;
}
- function handle_queue() {
+ function run() {
+ if (!$this->start()) {
+ return false;
+ }
$this->log(LOG_INFO, 'checking for queued notices');
- $cnt = 0;
$transport = $this->transport();
do {
$qi = Queue_item::top($transport);
continue;
}
$this->log(LOG_INFO, 'finished broadcasting notice ID = ' . $notice->id);
+ $notice->free();
+ unset($notice);
$notice = NULL;
} else {
$this->log(LOG_WARNING, 'queue item for notice that does not exist');
}
$qi->delete();
- $cnt++;
+ $qi->free();
+ unset($qi);
+ $this->idle(0);
} else {
$this->clear_old_claims();
- sleep(10);
+ $this->idle(5);
}
} while (true);
+ if (!$this->finish()) {
+ return false;
+ }
+ return true;
}
+ function idle($timeout=0) {
+ if ($timeout>0) {
+ sleep($timeout);
+ }
+ }
+
function clear_old_claims() {
$qi = new Queue_item();
$qi->transport = $this->transport();
$qi->whereAdd('now() - claimed > '.CLAIM_TIMEOUT);
$qi->update(DB_DATAOBJECT_WHEREADD_ONLY);
+ $qi->free();
+ unset($qi);
}
function log($level, $msg) {