UNPKG

@berish/rfp

Version:

Binary secure transport organization protocol for peer communication using function fingerprints

139 lines 5.37 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.Peer = void 0; const serviceChannel_1 = require("../serviceChannel"); const transport_1 = require("../transport"); const logger_1 = require("../logger"); const emitter_1 = require("../emitter"); const serber_1 = require("../serber"); const connection_1 = require("./connection"); const errors_1 = require("../errors"); const emit_1 = require("./emit"); const send_1 = require("./send"); const const_1 = require("../const"); const peerScope_1 = require("./peerScope"); class Peer { constructor(params) { this[_a] = new peerScope_1.PeerScope(this); this._params = null; this._logger = null; this._connection = null; this._serberInstance = null; this._serviceChannel = new serviceChannel_1.ServiceChannel(this); this._receiveEmitter = emitter_1.getReceiveEmitter(); this._emitter = emitter_1.getEmitter(); const { logger, name } = params || {}; this._params = params || {}; this._logger = logger || logger_1.getConsoleLogger(name); } get params() { return this._params; } get logger() { return this._logger; } get serberInstance() { if (!this._serberInstance) this._serberInstance = serber_1.serberWithPlugins; return this._serberInstance; } get receiveEmitter() { return this._receiveEmitter; } get emitter() { return this._emitter; } get serviceChannel() { return this._serviceChannel; } get connection() { return this._connection; } set connection(value) { this._connection = value; } setLogger(logger) { this._logger = logger; return this; } start(transport) { return __awaiter(this, void 0, void 0, function* () { try { this.emitter.removeState('disconnect.start'); this.emitter.removeState('disconnect.finish'); yield this.stop(); this.logger.info('connect.start'); yield this.emitter.emitStateAsync('connect.start', null); this.connection = transport_1.PeerConnection.create(transport, this); this.connection.transportConnect(); this.emitter.removeState('transport.disconnected'); yield this.emitter.emitStateAsync('transport.connected', null); yield connection_1.connect(this); yield this.emitter.emitStateAsync('connect.finish', null); this.logger.info('connect.finish'); } catch (err) { yield this.emitter.emitAsync('error', err); } }); } stop() { return __awaiter(this, void 0, void 0, function* () { try { if (this.connection) { this.emitter.removeState('connect.start'); this.emitter.removeState('connect.finish'); this.logger.info('disconnect.start'); yield this.emitter.emitStateAsync('disconnect.start', null); yield this[const_1.SYMBOL_PEER_SCOPE].clear().catch(); this.connection.transportDisconnect(); this.connection = null; this.emitter.removeState('transport.connected'); yield this.emitter.emitStateAsync('transport.disconnected', null); yield connection_1.disconnect(this); yield this.emitter.emitStateAsync('disconnect.finish', null); this.logger.info('disconnect.finish'); } } catch (err) { this.connection = null; yield this.emitter.emitAsync('error', err); } }); } setSerber(callback) { const serber = callback(serber_1.internalPlugins); if (serber) this._serberInstance = serber; return this; } receive(path, listener) { return emit_1.receive(this, path, listener); } unreceive(receiveHash) { return emit_1.unreceive(this, receiveHash); } unreceiveAll() { return emit_1.unreceiveAll(this); } send(outcomeChunk) { return __awaiter(this, void 0, void 0, function* () { if (!this.connection) throw new errors_1.ConnectionError('Peer is disconnected'); return send_1.sendInitial(this, outcomeChunk); }); } } exports.Peer = Peer; _a = const_1.SYMBOL_PEER_SCOPE; //# sourceMappingURL=peer.js.map