summaryrefslogtreecommitdiff
path: root/src/Application.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Application.php')
-rw-r--r--src/Application.php95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/Application.php b/src/Application.php
new file mode 100644
index 0000000..88843ac
--- /dev/null
+++ b/src/Application.php
@@ -0,0 +1,95 @@
+<?php
+
+namespace FBeans\BlaIRC;
+
+use FBeans\BlaIRC\Command;
+use Symfony\Component\Console\Application as SymfonyApplication;
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Input\ArgvInput;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\ConsoleOutput;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Process\Process;
+
+abstract class Application
+{
+ protected $input;
+ protected $output;
+ protected $application;
+
+ // ... put here the code to run in your command
+
+ // this method must return an integer number with the "exit status code"
+ // of the command. You can also use these constants to make code more readable
+
+ // return this if there was no problem running the command
+ // (it's equivalent to returning int(0))
+
+
+ // or return this if some error happened during the execution
+ // (it's equivalent to returning int(1))
+ // return Command::FAILURE;
+ abstract protected function command(): Command;
+
+ public function fromArgv()
+ {
+ return $this->setInput(new ArgvInput());
+ }
+
+ public function fromStdin()
+ {
+ return $this->setInput(new ArrayInput($this->readStdin()));
+ }
+
+ public function toConsole()
+ {
+ return $this->setOutput(new ConsoleOutput);
+ }
+
+ public function toIRC()
+ {
+ return null;
+ }
+
+ public function __construct(InputInterface $input = null, OutputInterface $output = null)
+ {
+ $this->setInput($input)->setOutput($output);
+ }
+
+ public function setInput(InputInterface $input = null)
+ {
+ $this->input = $input;
+
+ return $this;
+ }
+
+ public function setOutput(OutputInterface $output = null)
+ {
+ $this->output = $output;
+
+ return $this;
+ }
+
+ public function run()
+ {
+ $this->application = new SymfonyApplication();
+ $command = $this->command();
+
+ $this->application->add($command);
+ $this->application->setDefaultCommand($command->getName());
+ $this->application->run($this->input, $this->output);
+ }
+
+ protected function readStdin()
+ {
+ $stream = fopen("php://stdin", "r");
+ $input_string = fgets($stream, 128);
+ $input_string = rtrim($input_string);
+
+ $input_array = explode(' ', $input_string);
+
+ fclose($stream);
+
+ return $input_array;
+ }
+}