in lib/memcached.js [50:112]
exports.servers = function(endpoint, callback) {
var response = "";
var errors = [];
var lines = [];
var servers = [];
var parts = endpoint.split(':');
// Send specific message to server
var client = net.connect({ host: parts[0], port: parts[1] }, function() {
client.write("config get cluster\r\n");
});
client.setTimeout(config.timeout);
client.setEncoding('utf8');
// Buffer all data and parse response when "END" is received
client.on('data', function(chunk) {
response = response + chunk;
var index = response.indexOf("\r\n");
while(index != -1) {
var line = response.substr(0, index); // Strip "\r\n"
response = response.substr(index+2);
lines.push(line);
if(line == "END") {
// First line (\r\n delimited) is the CONFIG response
if(lines[0].split(" ")[0] != "CONFIG") {
console.error("Invalid response from server when requesting MemcacheD cluster configuration", JSON.stringify(lines));
callback(new Error("Invalid response from server when requesting MemcacheD cluster configuration" + lines[0]), servers);
client.end();
break;
}
// Second line ("\r\n" delimited) contains the response data
// Server names (" " separated) are in the second part ("\n" delimited)
var serverList = lines[1].split("\n")[1].split(" ");
for(var i = 0; i < serverList.length; ++i) {
var info = serverList[i].split("|");
servers.push(info[1] + ":" + info[2]);
}
// Done, get back the result
callback(null, servers);
client.end();
break;
}
index = response.indexOf("\r\n");
}
});
client.on('timeout', function() {
client.removeAllListeners();
client.end();
client.destroy();
console.error("Timeout occured when retrieving server list");
callback(new Error("Timeout occured when retrieving server list"), servers);
});
client.on('error', function(err) {
console.error("Error occured when retrieving server list:", err);
callback(new Error("Error occured when retrieving server list: " + err), servers);
});
}