@nomiclabs/buidler
Version:
Buidler is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.
75 lines • 3.24 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const debug_1 = __importDefault(require("debug"));
const http_1 = __importDefault(require("http"));
const ws_1 = require("ws");
const http_2 = require("../../core/providers/http");
const handler_1 = __importDefault(require("./handler"));
const log = debug_1.default("buidler:core:buidler-evm:jsonrpc");
class JsonRpcServer {
constructor(config) {
this.getProvider = (name = "json-rpc") => {
const { address, port } = this._httpServer.address();
return new http_2.HttpProvider(`http://${address}:${port}/`, name);
};
this.listen = () => {
return new Promise((resolve) => {
log(`Starting JSON-RPC server on port ${this._config.port}`);
this._httpServer.listen(this._config.port, this._config.hostname, () => {
// We get the address and port directly from the server in order to handle random port allocation with `0`.
resolve(this._httpServer.address());
});
});
};
this.waitUntilClosed = async () => {
const httpServerClosed = new Promise((resolve) => {
this._httpServer.once("close", resolve);
});
const wsServerClosed = new Promise((resolve) => {
this._wsServer.once("close", resolve);
});
return Promise.all([httpServerClosed, wsServerClosed]);
};
this.close = async () => {
return Promise.all([
new Promise((resolve, reject) => {
log("Closing JSON-RPC server");
this._httpServer.close((err) => {
if (err !== null && err !== undefined) {
log("Failed to close JSON-RPC server");
reject(err);
return;
}
log("JSON-RPC server closed");
resolve();
});
}),
new Promise((resolve, reject) => {
log("Closing websocket server");
this._wsServer.close((err) => {
if (err !== null && err !== undefined) {
log("Failed to close websocket server");
reject(err);
return;
}
log("Websocket server closed");
resolve();
});
}),
]);
};
this._config = config;
const handler = new handler_1.default(config.provider);
this._httpServer = http_1.default.createServer();
this._wsServer = new ws_1.Server({
server: this._httpServer,
});
this._httpServer.on("request", handler.handleHttp);
this._wsServer.on("connection", handler.handleWs);
}
}
exports.JsonRpcServer = JsonRpcServer;
//# sourceMappingURL=server.js.map
;