class CLI
{
+ protected $cliParser;
+ protected $config;
+
+ public function __construct()
+ {
+ $this->setupCli();
+ }
+
public function run()
{
- $s = new Socket('192.168.3.95');
- $s->run();
+ $this->config = new Config();
+ try {
+ $result = $this->cliParser->parse();
+ } catch (\Exception $exc) {
+ $this->cliParser->displayError($exc->getMessage());
+ }
+
+ $this->fillConfig($this->config, $result);
+
+ $log = new Log();
+ if ($result->options['debug'] || $result->options['debugEdss1']) {
+ $debugLogger = new Logger_Debug();
+ $log->addLogger($debugLogger, '*');
+ if ($result->options['debugEdss1']) {
+ $debugLogger->edss1MsgOnly = true;
+ }
+ }
+ $log->addLogger(
+ new Logger_CallEcho(), array('startingCall', 'finishedCall')
+ );
+
+ $callMonitor = new CallMonitor($this->config, $log);
+ $callMonitor->addDetailler(new CallMonitor_Detailler_LDAP());
+ $callMonitor->addDetailler(new CallMonitor_Detailler_OpenGeoDb());
+
+ $handler = new MessageHandler($this->config, $log, $callMonitor);
+
+ if ($this->config->replayFile !== null) {
+ $sourceClass = 'callnotifier\Source_File';
+ } else {
+ $sourceClass = 'callnotifier\Source_Remote';
+ }
+ $source = new $sourceClass($this->config, $handler);
+ $source->run();
+ }
+
+ public function setupCli()
+ {
+ $p = new \Console_CommandLine();
+ $p->description = 'Notifies about incoming calls on an Auerswald COMpact 3000';
+ $p->version = '0.0.1';
+
+ $p->addOption(
+ 'host',
+ array(
+ 'short_name' => '-h',
+ 'long_name' => '--host',
+ 'description' => 'IP of COMpact 3000',
+ 'help_name' => 'IP',
+ 'action' => 'StoreString'
+ )
+ );
+
+ $p->addOption(
+ 'dumpFile',
+ array(
+ 'long_name' => '--dump',
+ 'description' => 'dump messages into file for later replay',
+ 'help_name' => 'FILE',
+ 'action' => 'StoreString'
+ )
+ );
+ $p->addOption(
+ 'replayFile',
+ array(
+ 'long_name' => '--replay',
+ 'description' => "Replay messages from file instead from network",
+ 'help_name' => 'FILE',
+ 'action' => 'StoreString'
+ )
+ );
+
+ $p->addOption(
+ 'debug',
+ array(
+ 'short_name' => '-d',
+ 'long_name' => '--debug',
+ 'description' => "Debug mode: Echo all received messages and events",
+ 'action' => 'StoreTrue'
+ )
+ );
+ $p->addOption(
+ 'debugEdss1',
+ array(
+ 'short_name' => '-e',
+ 'long_name' => '--debug-edss1',
+ 'description' => "Debug mode: Show EDSS1 messages only",
+ 'action' => 'StoreTrue'
+ )
+ );
+
+ $this->cliParser = $p;
+ }
+
+ protected function fillConfig($config, $result)
+ {
+ $config->setIfNotEmpty('host', $result->options['host']);
+ $config->setIfNotEmpty('dumpFile', $result->options['dumpFile']);
+ $config->setIfNotEmpty('replayFile', $result->options['replayFile']);
}
}