@zandor300/jsmodbus
Version:
Implementation for the Serial/TCP Modbus protocol.
66 lines (65 loc) • 2.1 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const user_request_error_1 = require("./user-request-error");
const user_request_metrics_1 = require("./user-request-metrics");
const debug_1 = __importDefault(require("debug"));
const debug = (0, debug_1.default)('user-request');
class UserRequest {
constructor(request, timeout = 5000, responseHandler) {
debug('creating new user request with timeout', timeout);
this._request = request;
this._timeout = timeout;
this._responseHandler = responseHandler;
this._metrics = new user_request_metrics_1.UserRequestMetrics();
this._promise = new Promise((resolve, reject) => {
this._resolve = resolve;
this._reject = reject;
});
}
createPayload() {
return this._request.createPayload();
}
start(cb) {
this._metrics.startedAt = new Date();
this._timer = setTimeout(() => {
this._reject(new user_request_error_1.UserRequestError({
err: 'Timeout',
message: 'Req timed out',
request: this._request
}));
this._responseHandler.clearBuffer();
cb();
}, this._timeout);
}
get metrics() {
return this._metrics;
}
done() {
clearTimeout(this._timer);
}
get request() {
return this._request;
}
get timeout() {
return this._timeout;
}
get promise() {
return this._promise;
}
resolve(response) {
this._metrics.receivedAt = new Date();
debug('request completed in %d ms (sat in cue %d ms)', this.metrics.transferTime, this.metrics.waitTime);
return this._resolve({
metrics: this.metrics,
request: this._request,
response
});
}
get reject() {
return this._reject;
}
}
exports.default = UserRequest;