Source: node/RosTCP.js

var Ros = require('../core/Ros');
var net = require('net');
var socketAdapter = require('../core/SocketAdapter.js');
var util = require('util');

/**
 * Same as core Ros except supports TCP connections
 * @private
 */ 
function RosTCP(options) {
  options = options || {};
  if (!options.encoding) {
    util.debug('ROSLib uses utf8 encoding by default.' +
      'It would be more efficent to use ascii (if possible)');
  }
  this.encoding = options.encoding || 'utf8';
  Ros.call(this, options);

  if (!this.socket && (options.host || options.port)) {
    this.connect({
      host: options.host,
      port: options.port
    });
  }
}

util.inherits(RosTCP, Ros);

/**
 * Connects to a live socket
 *
 * * url (String|Int|Object): Address and port to connect to (see http://nodejs.org/api/net.html)
 *     format {host: String, port: Int} or (port:Int), or "host:port"
 */
RosTCP.prototype.connect = function(url) {
  if (typeof url === 'string' && url.slice(0, 5) === 'ws://') {
    Ros.prototype.connect.call(this, url);
  } else {
    var events = socketAdapter(this);
    this.socket = net.connect(url)
      .on('data', events.onmessage)
      .on('close', events.onclose)
      .on('error', events.onerror)
      .on('connect', events.onopen);
    this.socket.setEncoding(this.encoding);
    this.socket.setTimeout(0);

    // Little hack for call on connection
    this.socket.send = this.socket.write;
    // Similarly for close
    this.socket.close = this.socket.end;
  }
};

module.exports = RosTCP;