00001 <?php
00002
00003
00004
00005
00006
00007
00008 class EventSource implements IEventSource {
00009
00010
00011
00012 private $sinks = array();
00013
00014
00015
00016
00017 protected function __construct() {
00018
00019 }
00020
00021
00022
00023
00024
00025
00026 public static function Instance() {
00027 static $inst = null;
00028 if ($inst == null) {
00029 $inst = new EventSource();
00030 }
00031 return $inst;
00032 }
00033
00034
00035
00036
00037 public function register($sink) {
00038 $this->sinks[] = $sink;
00039 }
00040
00041
00042
00043
00044
00045
00046
00047
00048 public function invoke_event_no_result($event_name, $event_params) {
00049 $result = array();
00050 return self::invoke_event($event_name, $event_params, $result);
00051 }
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063 public function invoke_event($event_name, $event_params, &$event_result) {
00064 $ret = new Status();
00065 foreach($this->sinks as $sink) {
00066 if (method_exists($sink, 'on_event')) {
00067 $ret->merge($sink->on_event($event_name, $event_params, $event_result));
00068 }
00069 }
00070 return $ret;
00071 }
00072 }
00073 ?>