_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:----rrXM2BlzDzcu48q1t8ruLZ3ZEUX1HMREHUb5WIg5UUFIW2FCQvxilc/L48pigh3n7g5JEKGekAOfyFzAHPuBHRt4PJD3cwzTCmOcH0zUph8dkc8poHEmVicbOm/mK3yPgmckSFy+YXBtJUG0a9hTkj44Pim4ROvMpy+prTOSrIg8Y8ZLpXZvXkFos1MAMZKtkIW1mmHAyd+q/k5z2K5vVKwJcBULf0VbCIuAXxAAQJA48fXGfayr1mF5AWiv5tbAJLLVWN3w0jgEreDhCinYrkP1BzE+9dR5OmxotI0Ue7pRb/fZWjwj8MGvwirvb3vgWSDcj8J+0H4+C97REvRGi8KJtvSosaLahqsTBsN61GDoAlwzbFJCXD6QZmY0vU4kJjrCbMgfDriVLQpZo8LtDCOqi/YF++tEMYZvooVz33+Ib7ZBrgXuOOYpTAnW2bnHz4IbjLHg0zWFiGBX/0m++t3IzihOnk4DKD1cM6DRsXuDleLcWwA5yVSgN/klrNfKSYT7WMjxUPkeCILR67s6AgloqCWnc0kdfqHyV/KyWe07pWhdt06d/Mz4kdM0Ae3euWsg4vD5jnhEMQ94IJtFFyLNc6O1MUE3DO5B+QOJEVq5rpT77IvOhuy9Pm/lKJ93oSXjDYbRKLXqaOoewEOTpvmhqprqCoj2LPxLbLUO9zs=----ATTACHMENT:----Nzk1OTY3NDUyOTcyODc5OCA4NTA2MTg4ODEyOTUzMjI2IDUwODU0NDQ0NTMyMDgyNzY=