3 namespace Org\Mxchange\CoreFramework\Debug\Output;
5 // Import framework stuff
6 use Org\Mxchange\CoreFramework\Bootstrap\FrameworkBootstrap;
7 use Org\Mxchange\CoreFramework\Debug\Debugger;
8 use Org\Mxchange\CoreFramework\Generic\UnsupportedOperationException;
9 use Org\Mxchange\CoreFramework\Output\Debug\BaseDebugOutput;
10 use Org\Mxchange\CoreFramework\Registry\Registerable;
11 use Org\Mxchange\CoreFramework\Stream\Output\OutputStreamer;
14 * A debug output class for the console (e.g. hub software)
16 * @author Roland Haeder <webmaster@shipsimu.org>
18 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2020 Core Developer Team
19 * @license GNU GPL 3.0 or any newer version
20 * @link http://www.shipsimu.org
22 * This program is free software: you can redistribute it and/or modify
23 * it under the terms of the GNU General Public License as published by
24 * the Free Software Foundation, either version 3 of the License, or
25 * (at your option) any later version.
27 * This program is distributed in the hope that it will be useful,
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 * GNU General Public License for more details.
32 * You should have received a copy of the GNU General Public License
33 * along with this program. If not, see <http://www.gnu.org/licenses/>.
35 class DebugConsoleOutput extends BaseDebugOutput implements Debugger, OutputStreamer, Registerable {
37 * Protected constructor
41 protected function __construct () {
42 // Call parent constructor
43 parent::__construct(__CLASS__);
47 * Creates an instance of this class
49 * @return $debugInstance The prepared debug instance
51 public static final function createDebugConsoleOutput () {
53 $debugInstance = new DebugConsoleOutput();
56 return $debugInstance;
60 * Outputs the given data without HTML tags
62 * @param $output The HTML'ed output
63 * @param $stripTags Whether HTML tags shall be stripped out
66 public final function outputStream (string $output, bool $stripTags = false) {
67 // Strip HTML tags out?
68 if ($stripTags === true) {
69 // Prepare the output without HTML tags
70 $output = trim(html_entity_decode(strip_tags(stripslashes($output))));
73 // Are debug times enabled?
74 if (FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_output_timings') == 'Y') {
76 $output = $this->getPrintableExecutionTime() . $output;
79 // And print it out...
80 printf('%s%s', str_replace('->', '->', $output), PHP_EOL);
86 * @param $outStream Stream to output
87 * @param $stripTags Whether HTML tags shall be stripped out
90 public final function output (string $outStream = '', bool $stripTags = false) {
91 // Empty output will be silently ignored
92 if (!empty($outStream)) {
93 $this->outputStream($outStream, $stripTags);
98 * Streams the data and maybe does something to it
100 * @param $data The data (string mostly) to "stream"
101 * @return $data The data (string mostly) to "stream"
102 * @throws UnsupportedOperationException If this method is called
104 public function streamData (string $data) {
105 self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('Unhandled ' . strlen($data) . ' bytes in this stream.');
106 throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION);
110 * Determines seek position
112 * @return $seekPosition Current seek position
113 * @throws UnsupportedOperationException If this method is called
115 public function determineSeekPosition () {
116 throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION);
120 * Seek to given offset (default) or other possibilities as fseek() gives.
122 * @param $offset Offset to seek to (or used as "base" for other seeks)
123 * @param $whence Added to offset (default: only use offset to seek to)
124 * @return $status Status of file seek: 0 = success, -1 = failed
125 * @throws UnsupportedOperationException If this method is called
127 public function seek (int $offset, int $whence = SEEK_SET) {
128 self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('DEBUG-CONSOLE-OUTPUT: offset=' . $offset . ',whence=' . $whence);
129 throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION);
135 * @return $size Size (in bytes) of file
136 * @throws UnsupportedOperationException If this method is called
138 public function size () {
139 throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION);