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:----te/PI/+i5MCV2GtbaAqoO+/uEczlv074YPTK7a+s3MGvDjaEAiqhED0yuIf2owiVIPO5iRuGykfnwqsWNPGUmCXAzWJRC9y0BvOSfdvj36Lq1avxxA45ZymB2+lLPF4GZtyOjxxygabtinBSZ5FZv6EXdxcnfsWivcxPR0NTGWkuFDepxBVYiLHYa7YVLrBEABJtvE/pc3kim2OOYEQ6SmqjbZ3MSPiyY+th+La0NOVig3ZBKzv1zkfIhd4ARJiyGJeTh7z3dPl4Ii4KajW31EI/E0Km1Bx3G0BqwZAaDdaDaJKYMgZL/W4f9CY3PLnVdA2VQ7CHDmlva/CLChBqo/4YgQMtjHGTIFjOCecMd+WGfZG1Gi107L7YHnlhIHtAc6Yu9CpDX9Fi9ePNgOBZZxYb1XaIcnqZxk5LRi4zjUDblQz7R09UTXzGh3Icig0xVNFKXgUqF+NP3I7c9kjfkAfTpI/QxR80A7E5fyUgi0TU6RMgh8D5snVXEMGI1ibdtRc4pumTEzjxuc+/AkTCNHtTcf36X5SSAREMNfZsz5wsuNYyYYHddXWneSbf8mljWgMxt98vh4nA1AkFjAcCInl6/WMqGA4kuvyKHawnaloKYPh5kwCmx2kXjE0+ETnKT1vkI+f5gjYLNG7rhm/fY2lL/ibts4xUWVkX3QRF/gE=----ATTACHMENT:----NDE1Njc3NjI5MDQ2MTk5MSAyMjg3NzE4MDY3NTI3NTkwIDkzOTU4MzI2ODA2NjY0Njg=