Overview

Namespaces

  • None
  • Peg
    • Cli
      • Commands
    • Config
    • Custom
      • Command
        • Action
          • Generate
          • Parse
      • CommandLine
      • Config
      • Localization
      • Utilities
    • Lib
      • Definitions
        • Element
      • Generator
      • Lexers
      • Plugins
      • Signals
        • Data
          • Definitions
          • Lexers
        • Type
  • PHP

Classes

  • Signal
  • SignalData
  • SignalHandler
  • Overview
  • Namespace
  • Class
  • Tree
  • Todo
 1: <?php
 2: /**
 3:  * @author Jefferson González
 4:  * @license MIT
 5:  */
 6: 
 7: namespace Peg\Lib\Signals;
 8: 
 9: /**
10:  * Signal management that can be implemented at a per object basic.
11:  */
12: class Signal
13: {
14:     /**
15:      * @var array
16:      */
17:     private $listeners;
18:     
19:     /**
20:      * Default constructor
21:      */
22:     public function __construct()
23:     {
24:         $this->listeners = array();
25:     }
26:     
27:     /**
28:      * Calls all callbacks listening for a given signal type.
29:      * @param string $signal_type
30:      * @param \Peg\Lib\Signals\SignalData $signal_data
31:      */
32:     public function Send($signal_type, \Peg\Lib\Signals\SignalData &$signal_data=null)
33:     {
34:         if(!isset($this->listeners[$signal_type]))
35:             return;
36:         
37:         foreach($this->listeners[$signal_type] as $callback_data)
38:         {
39:             $callback = $callback_data['callback'];
40:             
41:             if(is_object($signal_data))
42:                 $callback($signal_data);
43:             else
44:                 $callback();
45:         }
46:     }
47:     
48:     /**
49:      * Add a callback that listens to a specific signal.
50:      * @param string $signal_type
51:      * @param function $callback
52:      * @param int $priority
53:      */
54:     public function Listen($signal_type, $callback, $priority=10)
55:     {
56:         if(!isset($this->listeners[$signal_type]))
57:             $this->listeners[$signal_type] = array();
58:         
59:         $this->listeners[$signal_type][] = array(
60:             'callback'=>$callback,
61:             'priority'=>$priority
62:         );
63:         
64:         $this->listeners[$signal_type] = SignalHandler::Sort(
65:             $this->listeners[$signal_type], 'priority'
66:         );
67:     }
68:     
69:     /**
70:      * Remove a callback from listening a given signal type.
71:      * @param string $signal_type
72:      * @param function $callback
73:      */
74:     public function Unlisten($signal_type, $callback)
75:     {
76:         if(!isset($this->listeners[$signal_type]))
77:             return;
78:         
79:         foreach($this->listeners[$signal_type] as $position=>$callback_data)
80:         {
81:             $stored_callback = $callback_data['callback'];
82:             
83:             if($callback == $stored_callback)
84:             {
85:                 unset($this->listeners[$signal_type][$position]);
86:                 return;
87:             }
88:         }
89:     }
90: }
PEG Api API documentation generated by ApiGen 2.8.0