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(); }
} /** * 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']);