text: var scErrors = require('sc-errors');
  var InvalidActionError = scErrors.InvalidActionError;
  
  var Response = function (socket, id) {
    this.socket = socket;
    this.id = id;
    this.sent = false;
  };
  
  Response.prototype._respond = function (responseData) {
    if (this.sent) {
      throw new InvalidActionError('Response ' + this.id + ' has already been sent');
    } else {
      this.sent = true;
      this.socket.send(this.socket.encode(responseData));
    }
  };
  
  Response.prototype.end = function (data) {
    if (this.id) {
      var responseData = {
        rid: this.id
      };
      if (data !== undefined) {
        responseData.data = data;
      }
      this._respond(responseData);
    }
  };
  
  Response.prototype.error = function (error, data) {
    if (this.id) {
      var err = scErrors.dehydrateError(error);
  
      var responseData = {
        rid: this.id,
        error: err
      };
      if (data !== undefined) {
        responseData.data = data;
      }
  
      this._respond(responseData);
    }
  };
  
  Response.prototype.callback = function (error, data) {
    if (error) {
      this.error(error, data);
    } else {
      this.end(data);
    }
  };
  
  module.exports.Response = Response;
  