mokka
Version:
Mokka Consensus Algorithm implementation in Javascript
56 lines • 2.36 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Mokka = void 0;
const MessageApi_1 = require("./api/MessageApi");
const NodeApi_1 = require("./api/NodeApi");
const HeartbeatController_1 = require("./controllers/HeartbeatController");
const NodeModel_1 = require("./models/NodeModel");
const RequestProcessorService_1 = require("./services/RequestProcessorService");
class Mokka extends NodeModel_1.NodeModel {
constructor(options) {
super(options.privateKey, options.address, options.crashModel);
this.heartbeat = options.heartbeat;
this.electionTimeout = options.electionTimeout;
this.proofExpiration = options.proofExpiration;
this.logger = options.logger || {
// tslint:disable-next-line
error: console.log,
// tslint:disable-next-line
info: console.log,
// tslint:disable-next-line
trace: console.log
};
this.reqMiddleware = options.reqMiddleware ? options.reqMiddleware :
async (packet) => packet;
this.resMiddleware = options.resMiddleware ? options.resMiddleware :
async (packet) => packet;
this.customVoteRule = options.customVoteRule ? options.customVoteRule :
async (packet) => true;
this.heartbeatCtrl = new HeartbeatController_1.HeartbeatController(this);
this.requestProcessorService = new RequestProcessorService_1.RequestProcessorService(this);
this.nodeApi = new NodeApi_1.NodeApi(this);
this.messageApi = new MessageApi_1.MessageApi(this);
}
quorum(responses) {
if (!this.nodes.size || !responses)
return false;
return responses >= this.majority();
}
setVote(vote) {
this.vote = vote;
}
connect() {
this.heartbeatCtrl.setNextBeat(this.heartbeatCtrl.timeout());
this.heartbeatCtrl.watchBeat();
}
async disconnect() {
await this.heartbeatCtrl.stopBeat();
}
async emitPacket(packet) {
let parsedPacket = this.messageApi.decodePacket(packet);
parsedPacket = await this.reqMiddleware(parsedPacket);
await this.requestProcessorService.process(parsedPacket);
}
}
exports.Mokka = Mokka;
//# sourceMappingURL=main.js.map