diff options
author | Sarven Capadisli <csarven@controlyourself.ca> | 2009-07-09 17:02:27 +0000 |
---|---|---|
committer | Sarven Capadisli <csarven@controlyourself.ca> | 2009-07-09 17:02:27 +0000 |
commit | 228b2001d881db3b087ebfe0944ae421905a0cc6 (patch) | |
tree | 56367ea8701f50e1018e3779caf18cbb973d1330 | |
parent | be0b1495179f1cc1d96ea1849445a19d559283e2 (diff) | |
parent | 031146f4c757ca00fb9f528abf69ef4b229bdc18 (diff) |
Merge branch '0.8.x' of git@gitorious.org:laconica/dev into 0.8.x
-rw-r--r-- | lib/stompqueuemanager.php | 69 |
1 files changed, 36 insertions, 33 deletions
diff --git a/lib/stompqueuemanager.php b/lib/stompqueuemanager.php index 7da7c0011..d13af3fa5 100644 --- a/lib/stompqueuemanager.php +++ b/lib/stompqueuemanager.php @@ -108,55 +108,58 @@ class StompQueueManager $handsocks = $handler->getSockets(); - $this->_log(LOG_DEBUG, "Got ".count($handsocks)." sockets from handler."); - $this->_log(LOG_DEBUG, print_r($handsocks, true)); - $socks = array_merge(array($stompsock), $handsocks); $read = $socks; $write = array(); $except = array(); - $this->_log(LOG_DEBUG, "Starting select"); $ready = stream_select($read, $write, $except, $handler->timeout(), 0); - $this->_log(LOG_DEBUG, "Finished select with value '$ready'"); - if (!$ready || $read[0] !== $stompsock) { - $handler->idle(QUEUE_HANDLER_MISS_IDLE); - } else { - $frame = $this->con->readFrame(); - - if (!empty($frame)) { - $notice = Notice::staticGet('id', $frame->body); - - if (empty($notice)) { - $this->_log(LOG_WARNING, 'Got ID '. $frame->body .' for non-existent notice in queue '. $queue); - $this->con->ack($frame); - } else { - if ($handler->handle_notice($notice)) { - $this->_log(LOG_INFO, 'Successfully handled notice '. $notice->id .' posted at ' . $frame->headers['created'] . ' in queue '. $queue); - $this->con->ack($frame); - } else { - $this->_log(LOG_WARNING, 'Failed handling notice '. $notice->id .' posted at ' . $frame->headers['created'] . ' in queue '. $queue); - // FIXME we probably shouldn't have to do - // this kind of queue management ourselves - $this->con->ack($frame); - $this->enqueue($notice, $queue); - } - unset($notice); + if ($ready === false) { + $this->_log(LOG_ERR, "Error selecting on sockets"); + } else if ($ready > 0) { + if (in_array($stompsock, $read)) { + $this->_handleNotice($queue, $handler); + } + foreach ($handsocks as $sock) { + if (in_array($sock, $read)) { + $handler->idle(QUEUE_HANDLER_HIT_IDLE); + break; } + } + } + } + + $this->con->unsubscribe($this->_queueName($queue)); + } - unset($frame); + function _handleNotice($queue, $handler) + { + $frame = $this->con->readFrame(); - $handler->idle(QUEUE_HANDLER_HIT_IDLE); + if (!empty($frame)) { + $notice = Notice::staticGet('id', $frame->body); + if (empty($notice)) { + $this->_log(LOG_WARNING, 'Got ID '. $frame->body .' for non-existent notice in queue '. $queue); + $this->con->ack($frame); + } else { + if ($handler->handle_notice($notice)) { + $this->_log(LOG_INFO, 'Successfully handled notice '. $notice->id .' posted at ' . $frame->headers['created'] . ' in queue '. $queue); + $this->con->ack($frame); } else { - $handler->idle(QUEUE_HANDLER_MISS_IDLE); + $this->_log(LOG_WARNING, 'Failed handling notice '. $notice->id .' posted at ' . $frame->headers['created'] . ' in queue '. $queue); + // FIXME we probably shouldn't have to do + // this kind of queue management ourselves + $this->con->ack($frame); + $this->enqueue($notice, $queue); } + unset($notice); } - } - $this->con->unsubscribe($this->_queueName($queue)); + unset($frame); + } } function _queueName($queue) |