exports.servers = function()

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);
  });
}