/**
* @param string $ip
* @param callable $cb
*/
public function query($ip, $cb)
{
if (is_string($ip)) {
$ip = ip2long($ip);
}
$this->blocks->findOne(function ($blk) use($cb) {
if (!$blk) {
call_user_func($cb, false);
return;
}
$this->locations->findOne(function ($loc) use($cb) {
if ($loc) {
$loc['country'] = $this->countries[$loc['cc']];
$loc['text'] = $loc['country'];
if (isset($loc['r']) && !ctype_digit($loc['r'])) {
$loc['text'] = $loc['r'] . ', ' . $loc['text'];
}
if (isset($loc['c'])) {
$loc['text'] = $loc['c'] . ', ' . $loc['text'];
}
}
call_user_func($cb, $loc);
}, ['where' => ['_id' => $blk['l']]]);
}, ['where' => ['s' => ['$lte' => $ip]], 'sort' => ['s' => -1]]);
}