_connections); } /** * Get a specific connection. * * @param mixed $offset Offset. * @return \Hoa\Socket\Connection\Handler */ public function offsetGet($offset) { if (false === $this->offsetExists($offset)) { return null; } return $this->_connections[$offset]; } /** * Add a connection. * * @param mixed $offset Offset. * @param \Hoa\Socket\Connection\Handler $connection Connection * (handler). * @return void * @throws \Hoa\Socket\Exception */ public function offsetSet($offset, $connection) { if (!($connection instanceof Handler)) { throw new Socket\Exception( '%s only accepts %s\Handler objects.', 0, [__CLASS__, __NAMESPACE__] ); } if (null === $offset) { $this->_connections[] = $connection; } else { $this->_connections[$offset] = $connection; } if (1 < count($this)) { $this->getFirstConnection()->merge($connection); } return; } /** * Nothing (not allowed). * * @param mixed $offset Offset. * @return void * @throws \Hoa\Socket\Exception */ public function offsetUnset($offset) { throw new Socket\Exception( 'This operation is not allowed: you cannot unset a connection ' . 'from a group.', 1 ); return; } /** * Get iterator of all declared connections. * * @return \ArrayIterator */ public function getIterator() { return new \ArrayIterator($this->_connections); } /** * Count number of declared connections. * * @return int */ public function count() { return count($this->_connections); } /** * Semantics alias of $this->offsetSet(null, $connection). * * @param \Hoa\Socket\Connection\Handler $connection Connection * (handler). * @return \Hoa\Socket\Connection\Group */ public function merge(Handler $connection) { $this[] = $connection; return $this; } /** * Run the group of connections. * * @return void * @throws \Hoa\Socket\Exception */ public function run() { if (0 === count($this)) { throw new Socket\Exception( 'Nothing to run. You should merge a connection.', 2 ); } return $this->getFirstConnection()->run(); } /** * Get the first declared connection (where other connections have been * merged). * * @return \Hoa\Socket\Connection\Handler */ public function getFirstConnection() { return $this[key($this->_connections)]; } }