00001 <?php 00002 /*************************************************************************** 00003 * Copyright (C) 2009 by Ivan Y. Khvostishkov * 00004 * * 00005 * This program is free software; you can redistribute it and/or modify * 00006 * it under the terms of the GNU Lesser General Public License as * 00007 * published by the Free Software Foundation; either version 3 of the * 00008 * License, or (at your option) any later version. * 00009 * * 00010 ***************************************************************************/ 00011 00012 final class TextFileSender implements MessageQueueSender 00013 { 00014 private $queue = null; 00015 private $stream = null; 00016 00017 public static function create() 00018 { 00019 return new self; 00020 } 00021 00022 public function setQueue(MessageQueue $queue) 00023 { 00024 Assert::isInstance($queue, 'TextFileQueue'); 00025 00026 $this->queue = $queue; 00027 00028 return $this; 00029 } 00030 00034 public function getQueue() 00035 { 00036 return $this->queue; 00037 } 00038 00039 public function send(Message $message) 00040 { 00041 if (!$this->queue) 00042 throw new WrongStateException('you must set the queue first'); 00043 00044 Assert::isInstance($message, 'TextMessage'); 00045 00046 $this->getStream()->write( 00047 $message->getTimestamp()->toString()."\t" 00048 .str_replace(PHP_EOL, ' ', $message->getText()).PHP_EOL 00049 ); 00050 } 00051 00052 private function getStream() 00053 { 00054 if (!$this->stream) { 00055 Assert::isNotNull($this->queue->getFileName()); 00056 00057 $this->stream = FileOutputStream::create( 00058 $this->queue->getFileName(), true 00059 ); 00060 } 00061 00062 return $this->stream; 00063 } 00064 } 00065 ?>