@ntrip/caster
Version:
NTRIP caster
70 lines (69 loc) • 2.7 kB
JavaScript
"use strict";
/*
* This file is part of the @ntrip/caster distribution (https://github.com/node-ntrip/caster).
* Copyright (c) 2020 Nebojsa Cvetkovic.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.SocketClientTransport = void 0;
const net = require("net");
const tls = require("tls");
const transport_1 = require("../transport");
class SocketClientTransport extends transport_1.SingleConnectionTransport {
constructor(manager, options) {
super(manager, options);
this.options = options;
}
static new(options) {
return (caster) => new SocketClientTransport(caster, options);
}
open() {
this.socket = new net.Socket();
if (this.options.tls !== undefined)
this.socket = new tls.TLSSocket(this.socket, this.options.tls);
new Promise((resolve, reject) => {
this.socket.once(this.socket instanceof tls.TLSSocket ? 'secureConnect' : 'connect', resolve);
this.socket.once('error', reject);
}).then(() => {
try {
this.connect({
type: this.options.type,
mountpoint: this.options.mountpoint,
source: this.options.remote.host + ':' + this.options.remote.port,
stream: this.socket,
str: this.options.str,
gga: this.options.gga
});
this.emit('open');
}
catch (err) {
this.emit('error', err);
}
}).catch(err => this.emit('error', err));
this.socket.connect({
host: this.options.remote.host,
port: this.options.remote.port
});
}
close() {
var _a;
super.close();
(_a = this.socket) === null || _a === void 0 ? void 0 : _a.destroy();
}
get description() {
return `${this.options.tls === undefined ? 'tcp' : 'tls'}[${this.options.type}]`;
}
}
exports.SocketClientTransport = SocketClientTransport;