ethers.js/lib.commonjs/providers/subscriber-connection.js

56 lines
1.5 KiB
JavaScript
Raw Normal View History

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