/** * Fetches a channel object identified by the numeric channel_id, or * create that object if it doesn't already exist. * * @param int $channel_id * @return AMQPChannel */ public function channel(int $channel_id = null) { // garbage collect channels foreach ($this->channels as $i => $channel) { if ($channel->isClosed()) { unset($this->channels[$i]); } } // if (isset($this->channels[$channel_id])) { (yield $this->channels[$channel_id]); } else { $channel_id = $channel_id ? $channel_id : $this->getFreeChannelID(); $ch = new AMQPChannel($this, $channel_id); $this->channels[$channel_id] = $ch; (yield $ch->open()); (yield $ch); } }