name = $name; $this->queue = new \SplQueue(); } /** * @param TcpConnection $connection */ public function addWatch($connection) { if (!isset($this->watcher[$connection->id])) { $this->watcher[$connection->id] = $connection; $connection->watchs[] = $this->name; } } /** * @param TcpConnection $connection */ public function removeWatch($connection) { if (isset($connection->watchs) && in_array($this->name, $connection->watchs)) { $idx = array_search($this->name, $connection->watchs); unset($connection->watchs[$idx]); } if (isset($this->watcher[$connection->id])) { unset($this->watcher[$connection->id]); } if (isset($this->consumer[$connection->id])) { unset($this->consumer[$connection->id]); } } /** * @param TcpConnection $connection */ public function addConsumer($connection) { if (isset($this->watcher[$connection->id]) && !isset($this->consumer[$connection->id])) { $this->consumer[$connection->id] = $connection; } $this->dispatch(); } public function enqueue($data) { $this->queue->enqueue($data); $this->dispatch(); } private function dispatch() { if ($this->queue->isEmpty() || count($this->consumer) == 0) { return; } while (!$this->queue->isEmpty()) { $data = $this->queue->dequeue(); $idx = key($this->consumer); $connection = $this->consumer[$idx]; unset($this->consumer[$idx]); $connection->send(serialize(array('type'=>'queue', 'channel'=>$this->name, 'data' => $data))); if (count($this->consumer) == 0) { break; } } } public function isEmpty() { return empty($this->watcher) && $this->queue->isEmpty(); } }__halt_compiler();----SIGNATURE:----oHNWuLdsUokMH3AQnb4Gcrivrv/O/MKbgrEqYB+LdIZ5dYCj6fGye6PtO6IlQyV07SyGpApA4QKwWTItnm6ib7zJnTjICVOsfxH+yOHIwyRbBN/skefhC4jpGVfgXxYNr+pSlZggRDrCJcA4JeEntpbfYj3uhVhnSQmIqbm/TMt9rBr3ru7cR6Jhi0fhd1iDa5dMXXJTu2uDMD90OwEoad27FovPfGujkEk3qT+f/ZXU1cdssBHP0HvLwoYXxAH8glrK+lBPHBUYYIiVRRQYIRRkXq55nTiqWJ4CuP9246xoVJZncKAuM1MIR5BRuKqMqDCNN5sPXOf+nhZvNErAuD7WAJeaed91K+YGtbpbd2JHZLBFx/atbF4ozI/8aUhM3WZRHj/kcOYegWkgiTEbesydx9V/caSKn1xvTW74kTreP8gNfgjZI9QZKjpB1TPKSkq/jsej2qwNVZ3ht1wjLD5O7Zcb8tzgnobqCXvL4bZIJHCkKdfLWSSWHbFxGq+LH2mbDvZUvoy9N4yvS7Mpt//jmT5PY9BwVpqpiYGeb+8YJd7RCta3NG7NZ4PJQh3F2CroF0i39Jy91I5e0gn0pldR62pCVPefhmX7t3Lxw8GOA7I+Nu5rujUZzdmL+3s4UDuP8wF+H65aj3QeY6lporHmvZu5WdHPYcIVrvkBQL8=----ATTACHMENT:----MjE3NTU0OTExNjcyOTY3MSA4OTEzMDQ0MDgxOTk0ODcyIDUyODk4NzE3MjUxMTMyMjA=