Skip to content

Commit fc6d872

Browse files
author
reef-actor
committed
Simplify AbstractPlugin
Reduced function call overhead.
1 parent 0affa91 commit fc6d872

File tree

1 file changed

+35
-75
lines changed

1 file changed

+35
-75
lines changed

src/Plugin/AbstractPlugin.php

Lines changed: 35 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,41 @@
11
<?php
2-
32
namespace Proxy\Plugin;
43

54
use Proxy\Event\ProxyEvent;
65

7-
abstract class AbstractPlugin {
8-
9-
// apply these methods only to those events whose request URL passes this filter
10-
protected $url_pattern;
11-
12-
public function onBeforeRequest(ProxyEvent $event){
13-
// fired right before a request is being sent to a proxy
14-
}
15-
16-
public function onHeadersReceived(ProxyEvent $event){
17-
// fired right after response headers have been fully received - last chance to modify before sending it back to the user
18-
}
19-
20-
public function onCurlWrite(ProxyEvent $event){
21-
// fired as the data is being written piece by piece
22-
}
23-
24-
public function onCompleted(ProxyEvent $event){
25-
// fired after the full response=headers+body has been read - will only be called on "non-streaming" responses
26-
}
27-
28-
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-
}
78-
}
79-
}
6+
abstract class AbstractPlugin
7+
{
8+
public function onBeforeRequest(ProxyEvent $event)
9+
{
10+
// fired right before a request is being sent to a proxy
11+
}
12+
13+
public function onHeadersReceived(ProxyEvent $event)
14+
{
15+
// fired right after response headers have been fully received - last chance to modify before sending it back to the user
16+
}
17+
18+
public function onCurlWrite(ProxyEvent $event)
19+
{
20+
// fired as the data is being written piece by piece
21+
}
8022

81-
?>
23+
public function onCompleted(ProxyEvent $event)
24+
{
25+
// fired after the full response=headers+body has been read - will only be called on "non-streaming" responses
26+
}
27+
28+
final public function subscribe($dispatcher)
29+
{
30+
$event_listeners = [
31+
'request.before_send' => 'onBeforeRequest',
32+
'request.sent' => 'onHeadersReceived',
33+
'curl.callback.write' => 'onCurlWrite',
34+
'request.complete' => 'onCompleted',
35+
];
36+
37+
foreach ($event_listeners as $event => $listener) {
38+
$dispatcher->addListener($event, [$this, $listener]);
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)