var tls = require('tls'),
    frames = require('../fixtures/frames');

var uri = require('url').parse(process.argv[2]),
    host = uri.hostname,
    port = +uri.port,
    url = uri.path;

frames.createSynStream(host, url, function(syn_stream) {
  var start = +new Date,
      num = 3000;

  batch(port, host, syn_stream, 100, num, function() {
    var end = +new Date;
    console.log('requests/sec : %d', 1000 * num / (end - start));
  });
});

function request(port, host, data, callback) {
  var socket = tls.connect(port, host, {
    NPNProtocols: ['spdy/2'],
    ALPNProtocols: ['spdy/2']
  }, function() {
    socket.write(data);
    socket.once('data', function() {
      socket.destroy();
      callback();
    });
  });

  return socket;
};

function batch(port, host, data, parallel, num, callback) {
  var left = num,
      done = 0;

  for (var i = 0; i < parallel; i++) {
    run(i);
  }

  function run(i) {
    left--;
    if (left < 0) return;

    request(port, host, data, function() {
      if (++done ===  num) return callback();
      run(i);
    });
  }
};
