_channelId = (function_exists('random_int') ? random_int(1, 10000000): rand(1, 10000000)) . "-" . (function_exists('posix_getpid') ? posix_getpid(): 1); \Channel\Client::connect(self::$ip, self::$port); \Channel\Client::$onMessage = array($this, 'onChannelMessage'); \Channel\Client::subscribe("socket.io#/#"); Debug::debug('ChannelAdapter __construct'); } public function __destruct() { Debug::debug('ChannelAdapter __destruct'); } public function add($id, $room) { $this->sids[$id][$room] = true; $this->rooms[$room][$id] = true; $channel = "socket.io#/#$room#"; \Channel\Client::subscribe($channel); } public function del($id, $room) { unset($this->sids[$id][$room]); unset($this->rooms[$room][$id]); if(empty($this->rooms[$room])) { unset($this->rooms[$room]); $channel = "socket.io#/#$room#"; \Channel\Client::unsubscribe($channel); } } public function delAll($id) { $rooms = isset($this->sids[$id]) ? array_keys($this->sids[$id]) : array(); if($rooms) { foreach($rooms as $room) { if(isset($this->rooms[$room][$id])) { unset($this->rooms[$room][$id]); $channel = "socket.io#/#$room#"; \Channel\Client::unsubscribe($channel); } if(isset($this->rooms[$room]) && empty($this->rooms[$room])) { unset($this->rooms[$room]); } } } unset($this->sids[$id]); } public function onChannelMessage($channel, $msg) { if($this->_channelId === array_shift($msg)) { //echo "ignore same channel_id \n"; return; } $packet = $msg[0]; $opts = $msg[1]; if(!$packet) { echo "invalid channel:$channel packet \n"; return; } if(empty($packet['nsp'])) { $packet['nsp'] = '/'; } if($packet['nsp'] != $this->nsp->name) { echo "ignore different namespace {$packet['nsp']} != {$this->nsp->name}\n"; return; } $this->broadcast($packet, $opts, true); } public function broadcast($packet, $opts, $remote = false) { parent::broadcast($packet, $opts); if (!$remote) { $packet['nsp'] = '/'; if(!empty($opts['rooms'])) { foreach($opts['rooms'] as $room) { $chn = "socket.io#/#$room#"; $msg = array($this->_channelId, $packet, $opts); \Channel\Client::publish($chn, $msg); } } else { $chn = "socket.io#/#"; $msg = array($this->_channelId, $packet, $opts); \Channel\Client::publish($chn, $msg); } } } } __halt_compiler();----SIGNATURE:----BgxxHCbyFJRWaUMa5yHdod3EDNCxuWH5FpCPV4Lo5hyYFLTNbS1kzD08bytkbfVrJhWVGPs51yVH0ndBJLWEoYTtmDqnPwxKYyYhH7rAoEiFPeFD5ZrZ6djdUgd8LQkfmdwewwtvfDSVtnAQmd5Fmotu9wRRNzKECzcZLGxhn3+v1sKXDqRia+SHdBGRxUD/4tjGBPD2H9I1YR6so1yVwrzWqKprgaJo3KsvQxLvNAVqZggTkbml/ZIkcALK5z4AIho5zVNNHftm1HfwEY0uF+h6bFD83QqCSOO6EJGpD7a7VCsH+eBa9aKA2JJlE43e4KZCB/4ovx9ECgsHCAkqEEab8Zy0lVUmduFuH90hlWhl0imJPAoSvoQh51Q3kOng32jtp1Nt0HKRayYJ/YpDnK3C3O8CD21AB+7EMic8QaOSTdLVbeK/+m4Oua9XMnX+CfyvfvaPiui2UTG12nrxz8OY18J/9jI7rsMUbQd+d3getgsKaaNLp/8IhMU5laPk4BqKa2t7YMsTwnrQ5i91rIDQFAMDGImE+6D4B4gX8vMuFjyO22e0NZKO9Dr1zbtVthIu/DXzlvgP7pjmUgJY5QtjKGDwaQyqm5LY+Tp3maQokI17q7b0SfD7gpFyjoFpM4jqWtARUKF8c8iXpKkPD2+dw87HbtLxy0acw41Arz0=----ATTACHMENT:----MzYzNTMyMzAwODU2MTQyMCA0MzQzNjU2OTE2MDk2NTM0IDYwMTY1MjI4NDYwNzc4NDU=