56 lines
1.1 KiB
JavaScript
56 lines
1.1 KiB
JavaScript
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;
|