Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 final class TextFileReceiver implements MessageQueueReceiver
00013 {
00014 private $queue = null;
00015 private $stream = null;
00016
00020 public static function create()
00021 {
00022 return new self;
00023 }
00024
00028 public function setQueue(MessageQueue $queue)
00029 {
00030 Assert::isInstance($queue, 'TextFileQueue');
00031
00032 $this->queue = $queue;
00033
00034 return $this;
00035 }
00036
00040 public function getQueue()
00041 {
00042 return $this->queue;
00043 }
00044
00048 public function receive($uTimeout = null)
00049 {
00050 if (!$this->queue)
00051 throw new WrongStateException('you must set the queue first');
00052
00053 if ($uTimeout && $this->getStream()->isEof())
00054 usleep($uTimeout);
00055
00056 $string = $this->getStream()->readString();
00057
00058 if (!$string && $this->getStream()->isEof())
00059 return null;
00060
00061 $this->getQueue()->setOffset($this->getStream()->getOffset());
00062
00063 $string = rtrim($string, PHP_EOL);
00064
00065 $chunks = preg_split("/\t/", $string, 2);
00066
00067 $time = isset($chunks[0]) ? $chunks[0] : null;
00068 $text = isset($chunks[1]) ? $chunks[1] : null;
00069
00070 Assert::isNotNull($time);
00071
00072 $result = TextMessage::create()->
00073 setTimestamp(Timestamp::create($time))->
00074 setText($text);
00075
00076 return $result;
00077 }
00078
00082 private function getStream()
00083 {
00084 if (!$this->stream) {
00085 Assert::isNotNull($this->queue->getFileName());
00086
00087 $this->stream = FileInputStream::create(
00088 $this->queue->getFileName()
00089 )->
00090 seek($this->queue->getOffset());
00091 }
00092
00093 return $this->stream;
00094 }
00095 }
00096 ?>