Пример #1
0
 public function case_get_vendor_factory()
 {
     $self = $this;
     $this->given($transport = 'foo', $factory = function ($socketUri) use(&$called, $self, $transport) {
         $called = true;
         $self->string($socketUri)->isEqualTo($transport . '://bar/baz');
         return new LUT(str_replace($transport, 'tcp', $socketUri));
     }, SUT::register($transport, $factory))->when(function () use(&$result, $transport) {
         $result = SUT::getFactory($transport);
     })->then->object($result)->isInstanceOf('Closure')->object($result('foo://bar/baz'))->isEqualTo(new LUT('tcp://bar/baz'))->boolean($called)->isTrue();
 }
Пример #2
0
 /**
  * Set socket.
  *
  * @param   string  $socketUri    Socket URI.
  * @return  \Hoa\Socket
  * @throws  \Hoa\Socket\Exception
  */
 protected function setSocket($socketUri)
 {
     if (false === ($pos = strpos($socketUri, '://'))) {
         $socket = new Socket($socketUri);
     } else {
         $transport = substr($socketUri, 0, $pos);
         $factory = Socket\Transport::getFactory($transport);
         $socket = $factory($socketUri);
         if (!$socket instanceof Socket) {
             throw new Socket\Exception('The transport registered for scheme “%s” is not valid: ' . 'It must return a valid Hoa\\Socket\\Socket instance.', 0, $transport);
         }
     }
     $old = $this->_socket;
     $this->_socket = $socket;
     return $old;
 }
Пример #3
0
 /**
  * Set the transport.
  *
  * @param   string  $transport    Transport (TCP, UDP etc.).
  * @return  string
  * @throws  \Hoa\Socket\Exception
  */
 protected function setTransport($transport)
 {
     $transport = strtolower($transport);
     if (false === Transport::exists($transport)) {
         throw new Exception('Transport %s is not enabled on this machin.', 3, $transport);
     }
     $old = $this->_transport;
     $this->_transport = $transport;
     return $old;
 }
Пример #4
0
    }
    /**
     * Factory to create a valid `Hoa\Socket\Socket` object.
     *
     * @param   string  $socketUri    URI of the socket to connect to.
     * @return  void
     */
    public static function transportFactory($socketUri)
    {
        $parsed = parse_url($socketUri);
        if (false === $parsed || !isset($parsed['host'])) {
            throw new Exception('URL %s seems invalid, cannot parse it.', 0, $socketUri);
        }
        $secure = isset($parsed['scheme']) ? 'ircs' === $parsed['scheme'] : false;
        /**
         * Regarding RFC
         * https://tools.ietf.org/html/draft-butcher-irc-url-04#section-2.4,
         * port 194 is likely to be a more “authentic” server, however at this
         * time the majority of IRC non secure servers are available on port
         * 6667.
         */
        $port = isset($parsed['port']) ? $parsed['port'] : (true === $secure ? 994 : 6667);
        return new static('tcp://' . $parsed['host'] . ':' . $port, $secure);
    }
}
/**
 * Register `irc://` and `ircs://` transports.
 */
HoaSocket\Transport::register('irc', ['Hoa\\Irc\\Socket', 'transportFactory']);
HoaSocket\Transport::register('ircs', ['Hoa\\Irc\\Socket', 'transportFactory']);