aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2012-07-14 22:56:33 +0200
committerChristian Weiske <cweiske@cweiske.de>2012-07-14 22:56:33 +0200
commitfc647788cf137595e84bea72edb16d86ab1d76a5 (patch)
treeabaff9679ba7ac8b029aae22a9b7d23494f17588 /src
parent706ce1501a9ab1a33e4106774665c631a3ad3749 (diff)
downloadauerswald-callnotifier-fc647788cf137595e84bea72edb16d86ab1d76a5.tar.gz
auerswald-callnotifier-fc647788cf137595e84bea72edb16d86ab1d76a5.zip
echo logger
Diffstat (limited to 'src')
-rw-r--r--src/callnotifier/CLI.php2
-rw-r--r--src/callnotifier/Logger.php9
-rw-r--r--src/callnotifier/Logger/Echo.php27
-rw-r--r--src/callnotifier/MessageHandler.php62
-rw-r--r--src/callnotifier/Source/File.php6
5 files changed, 100 insertions, 6 deletions
diff --git a/src/callnotifier/CLI.php b/src/callnotifier/CLI.php
index 928e4ce..f9a4937 100644
--- a/src/callnotifier/CLI.php
+++ b/src/callnotifier/CLI.php
@@ -24,6 +24,8 @@ class CLI
$this->fillConfig($this->config, $result);
$handler = new MessageHandler($this->config);
+ $handler->addLogger(new Logger_Echo(), '*');
+
if ($this->config->replayFile !== null) {
$sourceClass = 'callnotifier\Source_File';
} else {
diff --git a/src/callnotifier/Logger.php b/src/callnotifier/Logger.php
new file mode 100644
index 0000000..48a5ecf
--- /dev/null
+++ b/src/callnotifier/Logger.php
@@ -0,0 +1,9 @@
+<?php
+namespace callnotifier;
+
+interface Logger
+{
+ public function log($type, $arData);
+}
+
+?>
diff --git a/src/callnotifier/Logger/Echo.php b/src/callnotifier/Logger/Echo.php
new file mode 100644
index 0000000..eec9bb1
--- /dev/null
+++ b/src/callnotifier/Logger/Echo.php
@@ -0,0 +1,27 @@
+<?php
+namespace callnotifier;
+
+class Logger_Echo implements Logger
+{
+ public function __construct()
+ {
+ $cc = new \Console_Color2();
+ $this->begin = $cc->convert('%y');
+ $this->end = $cc->convert('%n');
+ $this->blue = $cc->convert('%b');
+ }
+
+ public function log($type, $arData)
+ {
+ if ($type == 'msgData') {
+ echo $this->begin . $arData['type'] . $this->end
+ . ': ' . $arData['details'] . "\n";
+ } else {
+ echo $this->blue . $type . $this->end . ': '
+ . var_export($arData, true) . "\n";
+ }
+ }
+
+}
+
+?>
diff --git a/src/callnotifier/MessageHandler.php b/src/callnotifier/MessageHandler.php
index b4ed645..89d07e7 100644
--- a/src/callnotifier/MessageHandler.php
+++ b/src/callnotifier/MessageHandler.php
@@ -5,6 +5,18 @@ class MessageHandler
{
protected $dumpHdl;
+ /**
+ * Array of logger object arrays.
+ * Key is the notification type, value is an array of logger objects
+ * that want to get notified about the type.
+ *
+ * @var array
+ */
+ protected $logger = array(
+ 'msgData' => array(),
+ 'incomingCall' => array()
+ );
+
public function __construct($config)
{
@@ -12,6 +24,30 @@ class MessageHandler
$this->prepareDump();
}
+ /**
+ * Add a logger
+ *
+ * @param Logger $logger Logger object to register
+ * @param array|string $types Single notification type or array of such
+ * types. "*" means "register for all types".
+ *
+ * @return self
+ */
+ public function addLogger(Logger $logger, $types)
+ {
+ if ($types == '*') {
+ $types = array_keys($this->logger);
+ }
+ $types = (array)$types;
+
+ foreach ($types as $type) {
+ if (!isset($this->logger[$type])) {
+ throw new \Exception('Unknown log type: ' . $type);
+ }
+ $this->logger[$type][] = $logger;
+ }
+ }
+
public function handle($msg)
{
if ($this->config->dumpFile !== null) {
@@ -27,17 +63,37 @@ class MessageHandler
return false;
}
list(, $type, $someid, $details) = $matches;
+ $this->log(
+ 'msgData',
+ array(
+ 'type' => $type,
+ 'id' => $someid,
+ 'details' => $details
+ )
+ );
if ($type != 'Info') {
//we only want info messages
- var_dump($type . ': ' . $details);
return;
}
//Vegw/Ets-Cref:[0xffef]/[0x64] - VEGW_SETUP from upper layer to internal destination: CGPN[**22]->CDPN[41],
- var_dump($details);
$regex = '#CGPN\\[([^\\]]+)\\]->CDPN\\[([^\\]]+)\\]#';
if (preg_match($regex, $details, $matches)) {
- var_dump('a call!', $matches);
+ list(, $from, $to) = $matches;
+ $this->log('incomingCall', array('from' => $from, 'to' => $to));
+ }
+ }
+
+ protected function log($type, $arData)
+ {
+ if (!isset($this->logger[$type])) {
+ throw new \Exception('Unknown log type: ' . $type);
+ }
+
+ if (count($this->logger[$type])) {
+ foreach ($this->logger[$type] as $logger) {
+ $logger->log($type, $arData);
+ }
}
}
diff --git a/src/callnotifier/Source/File.php b/src/callnotifier/Source/File.php
index c358397..9b6a03e 100644
--- a/src/callnotifier/Source/File.php
+++ b/src/callnotifier/Source/File.php
@@ -13,19 +13,19 @@ class Source_File
{
$file = $this->config->replayFile;
if (!file_exists($file)) {
- throw new Exception('Replay file does not exist');
+ throw new \Exception('Replay file does not exist');
}
$handle = fopen($file, 'r');
if (!$handle) {
- throw new Exception('Cannot open replay file for reading');
+ throw new \Exception('Cannot open replay file for reading');
}
while (($line = fgets($handle, 4096)) !== false) {
$this->handler->handle($line);
}
if (!feof($handle)) {
- throw new Exception('unexpected fgets() fail');
+ throw new \Exception('unexpected fgets() fail');
}
fclose($handle);
}