Implement a new command class for INFO to parse the new reply format for this command in Redis > 2.2.

This commit is contained in:
Daniele Alessandri
2011-03-05 15:15:10 +01:00
parent ca6ff4f734
commit f36d7a1d56
+37
View File
@@ -1976,6 +1976,12 @@ class RedisServer_v2_2 extends RedisServer_v2_0 {
class RedisServer_vNext extends RedisServer_v2_2 {
public function getVersion() { return 'DEV'; }
public function getSupportedCommands() {
return array_merge(parent::getSupportedCommands(), array(
/* remote server control commands */
'info' => '\Predis\Commands\Info_v24',
));
}
}
/* ------------------------------------------------------------------------- */
@@ -3125,6 +3131,37 @@ class Info extends \Predis\MultiBulkCommand {
}
}
class Info_v24 extends Info {
public function parseResponse($data) {
$info = array();
$current = null;
$infoLines = explode("\r\n", $data, -1);
foreach ($infoLines as $row) {
if ($row === '') {
continue;
}
if (preg_match('/^# (\w+)$/', $row, $matches)) {
$info[$matches[1]] = array();
$current = &$info[$matches[1]];
continue;
}
list($k, $v) = explode(':', $row);
if (!preg_match('/^db\d+$/', $k)) {
$current[$k] = $v;
}
else {
$db = array();
foreach (explode(',', $v) as $dbvar) {
list($dbvk, $dbvv) = explode('=', $dbvar);
$db[trim($dbvk)] = $dbvv;
}
$current[$k] = $db;
}
}
return $info;
}
}
class SlaveOf extends \Predis\MultiBulkCommand {
public function canBeHashed() { return false; }
public function getCommandId() { return 'SLAVEOF'; }