Skip to content

Commit

Permalink
Use promises instead of async
Browse files Browse the repository at this point in the history
  • Loading branch information
igorw committed Oct 24, 2012
1 parent eea6826 commit 3e934ed
Show file tree
Hide file tree
Showing 3 changed files with 271 additions and 39 deletions.
2 changes: 1 addition & 1 deletion composer.json
Expand Up @@ -6,7 +6,7 @@
"license": "MIT",
"require": {
"php": ">=5.3.2",
"react/async": "dev-master",
"jsor/promise": "dev-master",
"react/curry": "dev-master",
"react/dns": "0.2.*",
"react/socket": "0.2.*"
Expand Down
271 changes: 249 additions & 22 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 21 additions & 16 deletions src/React/Whois/Client.php
Expand Up @@ -2,52 +2,57 @@

namespace React\Whois;

use React\Async\Util as Async;
use Promise\Deferred as Deferred;
use React\Curry\Util as Curry;
use React\Dns\Resolver\Resolver;

class Client
{
private $resolver;
private $dns;
private $connFactory;

public function __construct(Resolver $resolver, $connFactory)
public function __construct(Resolver $dns, $connFactory)
{
$this->resolver = $resolver;
$this->dns = $dns;
$this->connFactory = $connFactory;
}

public function query($domain, $callback)
{
Async::waterfall(
array(
Curry::bind(array($this, 'resolveWhoisServer'), $domain),
Curry::bind(array($this, 'queryWhoisServer'), $domain),
),
$callback
);
$this
->resolveWhoisServer($domain)
->then(Curry::bind(array($this, 'queryWhoisServer'), $domain))
->then($callback);
}

public function resolveWhoisServer($domain, $callback)
public function resolveWhoisServer($domain)
{
$deferred = new Deferred();

$tld = substr(strrchr($domain, '.'), 1);
$target = $tld.'.whois-servers.net';

$this->resolver->resolve($target, $callback);
$this->dns->resolve($target, array($deferred, 'resolve'));

return $deferred;
}

public function queryWhoisServer($domain, $ip, $callback)
public function queryWhoisServer($domain, $ip)
{
$deferred = new Deferred();

$result = '';

$conn = call_user_func($this->connFactory, $ip);
$conn->write("$domain\r\n");
$conn->on('data', function ($data) use (&$result) {
$result .= $data;
});
$conn->on('close', function () use (&$result, $callback) {
$conn->on('close', function () use (&$result, $deferred) {
$result = str_replace("\r\n", "\n", $result);
$callback($result);
$deferred->resolve($result);
});

return $deferred;
}
}

0 comments on commit 3e934ed

Please sign in to comment.