11<?php
2-
32namespace Proxy \Plugin ;
43
54use Proxy \Event \ProxyEvent ;
65
76abstract class AbstractPlugin {
8-
9- // apply these methods only to those events whose request URL passes this filter
10- protected $ url_pattern ;
11-
7+
128 public function onBeforeRequest (ProxyEvent $ event ){
139 // fired right before a request is being sent to a proxy
1410 }
@@ -26,56 +22,15 @@ public function onCompleted(ProxyEvent $event){
2622 }
2723
2824 final public function subscribe ($ dispatcher ){
29-
30- $ dispatcher ->addListener ('request.before_send ' , function ($ event ){
31- $ this ->route ('request.before_send ' , $ event );
32- });
33-
34- $ dispatcher ->addListener ('request.sent ' , function ($ event ){
35- $ this ->route ('request.sent ' , $ event );
36- });
37-
38- $ dispatcher ->addListener ('curl.callback.write ' , function ($ event ){
39- $ this ->route ('curl.callback.write ' , $ event );
40- });
41-
42- $ dispatcher ->addListener ('request.complete ' , function ($ event ){
43- $ this ->route ('request.complete ' , $ event );
44- });
45- }
46-
47- // dispatch based on filter
48- final private function route ($ event_name , ProxyEvent $ event ){
49- $ url = $ event ['request ' ]->getUri ();
50-
51- // url filter provided and current request url does not match it
52- if ($ this ->url_pattern ){
53- if (starts_with ($ this ->url_pattern , '/ ' ) && preg_match ($ this ->url_pattern , $ url ) !== 1 ){
54- return ;
55- } else if (stripos ($ url , $ this ->url_pattern ) === false ){
56- return ;
57- }
58- }
59-
60- switch ($ event_name ){
61-
62- case 'request.before_send ' :
63- $ this ->onBeforeRequest ($ event );
64- break ;
65-
66- case 'request.sent ' :
67- $ this ->onHeadersReceived ($ event );
68- break ;
69-
70- case 'curl.callback.write ' :
71- $ this ->onCurlWrite ($ event );
72- break ;
73-
74- case 'request.complete ' :
75- $ this ->onCompleted ($ event );
76- break ;
77- }
25+ $ event_listeners = [
26+ 'request.before_send ' => 'onBeforeRequest ' ,
27+ 'request.sent ' => 'onHeadersReceived ' ,
28+ 'curl.callback.write ' => 'onCurlWrite ' ,
29+ 'request.complete ' => 'onCompleted ' ,
30+ ];
31+
32+ foreach ($ event_listeners as $ event => $ listener ) {
33+ $ dispatcher ->addListener ($ event , [$ this , $ listener ]);
34+ }
7835 }
7936}
80-
81- ?>
0 commit comments