2022-09-05 23:57:11 +03:00
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
exports.BlockConnectionSubscriber = void 0;
|
2022-09-16 05:58:45 +03:00
|
|
|
const index_js_1 = require("../utils/index.js");
|
2022-11-30 23:44:23 +03:00
|
|
|
/**
|
|
|
|
* @TODO
|
|
|
|
*
|
|
|
|
* @_docloc: api/providers/abstract-provider
|
|
|
|
*/
|
2022-09-05 23:57:11 +03:00
|
|
|
class BlockConnectionSubscriber {
|
|
|
|
#provider;
|
|
|
|
#blockNumber;
|
2023-02-04 11:26:34 +03:00
|
|
|
#running;
|
2022-09-05 23:57:11 +03:00
|
|
|
#filterId;
|
|
|
|
constructor(provider) {
|
|
|
|
this.#provider = provider;
|
|
|
|
this.#blockNumber = -2;
|
2023-02-04 11:26:34 +03:00
|
|
|
this.#running = false;
|
2022-09-05 23:57:11 +03:00
|
|
|
this.#filterId = null;
|
|
|
|
}
|
|
|
|
start() {
|
2023-02-04 11:26:34 +03:00
|
|
|
if (this.#running) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
this.#running = true;
|
2022-09-05 23:57:11 +03:00
|
|
|
this.#filterId = this.#provider._subscribe(["newHeads"], (result) => {
|
2022-09-16 05:58:45 +03:00
|
|
|
const blockNumber = (0, index_js_1.getNumber)(result.number);
|
2022-09-05 23:57:11 +03:00
|
|
|
const initial = (this.#blockNumber === -2) ? blockNumber : (this.#blockNumber + 1);
|
|
|
|
for (let b = initial; b <= blockNumber; b++) {
|
|
|
|
this.#provider.emit("block", b);
|
|
|
|
}
|
|
|
|
this.#blockNumber = blockNumber;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
stop() {
|
2023-02-04 11:26:34 +03:00
|
|
|
if (!this.#running) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
this.#running = false;
|
2022-09-05 23:57:11 +03:00
|
|
|
if (this.#filterId != null) {
|
|
|
|
this.#provider._unsubscribe(this.#filterId);
|
|
|
|
this.#filterId = null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pause(dropWhilePaused) {
|
|
|
|
if (dropWhilePaused) {
|
|
|
|
this.#blockNumber = -2;
|
|
|
|
}
|
|
|
|
this.stop();
|
|
|
|
}
|
|
|
|
resume() {
|
|
|
|
this.start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
exports.BlockConnectionSubscriber = BlockConnectionSubscriber;
|
|
|
|
//# sourceMappingURL=subscriber-connection.js.map
|