echo logger
[auerswald-callnotifier.git] / src / callnotifier / CLI.php
1 <?php
2 namespace callnotifier;
3
4
5 class CLI
6 {
7     protected $cliParser;
8     protected $config;
9
10     public function __construct()
11     {
12         $this->setupCli();
13     }
14
15     public function run()
16     {
17         $this->config = new Config();
18         try {
19             $result = $this->cliParser->parse();
20         } catch (\Exception $exc) {
21             $this->cliParser->displayError($exc->getMessage());
22         }
23
24         $this->fillConfig($this->config, $result);
25
26         $handler = new MessageHandler($this->config);
27         $handler->addLogger(new Logger_Echo(), '*');
28
29         if ($this->config->replayFile !== null) {
30             $sourceClass = 'callnotifier\Source_File';
31         } else {
32             $sourceClass = 'callnotifier\Source_Remote';
33         }
34         $source = new $sourceClass($this->config, $handler);
35         $source->run();
36     }
37
38     public function setupCli()
39     {
40         $p = new \Console_CommandLine();
41         $p->description = 'Notifies about incoming calls on an Auerswald COMpact 3000';
42         $p->version = '0.0.1';
43
44         $p->addOption(
45             'host',
46             array(
47                 'short_name'  => '-h',
48                 'long_name'   => '--host',
49                 'description' => 'IP of COMpact 3000',
50                 'help_name'   => 'IP',
51                 'action'      => 'StoreString'
52             )
53         );
54
55         $p->addOption(
56             'dumpFile',
57             array(
58                 'long_name'   => '--dump',
59                 'description' => 'dump messages into file for later replay',
60                 'help_name'   => 'FILE',
61                 'action'      => 'StoreString'
62             )
63         );
64         $p->addOption(
65             'replayFile',
66             array(
67                 'long_name'   => '--replay',
68                 'description' => "Replay messages from file instead from network",
69                 'help_name'   => 'FILE',
70                 'action'      => 'StoreString'
71             )
72         );
73
74         $this->cliParser = $p;
75     }
76
77     protected function fillConfig($config, $result)
78     {
79         $config->setIfNotEmpty('host', $result->options['host']);
80         $config->setIfNotEmpty('dumpFile', $result->options['dumpFile']);
81         $config->setIfNotEmpty('replayFile', $result->options['replayFile']);
82     }
83 }
84
85 ?>