@berish/rfp
Version:
Binary secure transport organization protocol for peer communication using function fingerprints
139 lines • 5.37 kB
JavaScript
"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