This repository was archived by the owner on Nov 9, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 86
Expand file tree
/
Copy pathProtocol.php
More file actions
89 lines (72 loc) · 2.06 KB
/
Protocol.php
File metadata and controls
89 lines (72 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
namespace DNode;
use React\Socket\ServerInterface;
class Protocol
{
private $wrapper;
private $sessions = array();
public function __construct($wrapper)
{
$this->wrapper = $wrapper;
}
public function create()
{
// FIXME: Random ID generation, should be unique
$id = microtime();
$session = new Session($id, $this->wrapper);
$that = $this;
$session->on('end', function () use ($that, $id) {
return $that->destroy($id);
});
$this->sessions[$id] = $session;
return $session;
}
public function destroy($id)
{
unset($this->sessions[$id]);
}
public function end()
{
foreach ($this->sessions as $id => $session) {
$this->sessions[$id]->end();
}
}
public function parseArgs($args) {
$params = array();
foreach ($args as $arg) {
if (is_string($arg)) {
if (preg_match('/^\d+$/', $arg)) {
$params['port'] = $arg;
continue;
}
if (preg_match('/^\\//', $arg)) {
$params['path'] = $arg;
continue;
}
$params['host'] = $arg;
continue;
}
if (is_numeric($arg)) {
$params['port'] = $arg;
continue;
}
if (is_object($arg)) {
if ($arg instanceof \Closure) {
$params['block'] = $arg;
continue;
}
if ($arg instanceof ServerInterface) {
$params['server'] = $arg;
continue;
}
$arg = (array) $arg;
}
if (is_array($arg)) {
$params = array_merge($params, $arg);
continue;
}
throw new \InvalidArgumentException("Not sure what to do about " . gettype($arg) . " arguments");
}
return $params;
}
}