mole-rpc-transport-tcp
Version:
TCP transport for mole-rpc
51 lines (50 loc) • 1.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TcpTransportClient = void 0;
const net_1 = require("net");
const split2_1 = __importDefault(require("split2"));
class TcpTransportClient {
constructor(opts) {
this.opts = opts;
this.callback = () => undefined;
}
connect() {
if (!this.connecting) {
this.connecting = new Promise((resolve, reject) => {
var _a;
const socket = net_1.createConnection(this.opts);
const timer = setTimeout(() => {
socket.destroy();
reject(new Error("timeout"));
}, (_a = this.opts.connectTimeout) !== null && _a !== void 0 ? _a : 30000);
socket.once("connect", () => {
clearTimeout(timer);
resolve(socket);
});
socket.on("error", () => undefined);
socket.on("close", () => this.connecting = undefined);
socket.pipe(split2_1.default("\n")).on("data", (line) => this.callback(line));
});
}
return this.connecting;
}
onData(callback) {
this.callback = callback;
}
async sendData(data) {
const socket = await this.connect();
socket.write(`${data}\n`);
}
close() {
if (!this.connecting) {
return;
}
this.connecting
.then((socket) => socket.destroy())
.catch(() => undefined);
}
}
exports.TcpTransportClient = TcpTransportClient;