An old btc miner project.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

rpcconn.js 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. var net = require("net");
  2. class RPCConn {
  3. constructor(ip, port) {
  4. this.ready = false;
  5. this._callbacks = {};
  6. this._onready = [];
  7. this._listeners = {};
  8. this._id = 1;
  9. this.sock = new net.Socket();
  10. this.sock.connect(port, ip, () => {
  11. console.log("Connected to RPC server "+ip+":"+port+".");
  12. this.ready = true;
  13. this._onready.forEach(x => x());
  14. });
  15. var onjson = json => {
  16. var obj = JSON.parse(json);
  17. if (obj.id == null) {
  18. var listeners = this._listeners[obj.method];
  19. if (listeners)
  20. listeners.forEach(l => l(obj.params));
  21. if (!listeners || listeners.length === 0)
  22. console.log("Received method '"+obj.method+"', but no listeners.");
  23. return;
  24. }
  25. var cb = this._callbacks[obj.id];
  26. if (!cb)
  27. return console.log("Warning: received unknown ID "+obj.id);
  28. cb(obj.error, obj.result);
  29. }
  30. var currdata = "";
  31. this.sock.on("data", d => {
  32. var s = d.toString();
  33. currdata += d;
  34. if (s.indexOf("\n") !== -1) {
  35. currdata.split("\n").filter(l => l !== "").forEach(onjson);
  36. currdata = "";
  37. }
  38. });
  39. }
  40. wait() {
  41. return new Promise((resolve, reject) => {
  42. if (this.ready)
  43. return resolve();
  44. this._onready.push(resolve);
  45. });
  46. }
  47. call(name, ...params) {
  48. return new Promise((resolve, reject) => {
  49. var json = JSON.stringify({
  50. id: this._id,
  51. method: name,
  52. params: params
  53. });
  54. this._callbacks[this._id] = (err, res) => {
  55. if (err) reject(err);
  56. else resolve(res);
  57. }
  58. console.log("Sending '"+json+"'");
  59. this.sock.write(json+"\n");
  60. this._id += 1;
  61. });
  62. }
  63. on(name, fn) {
  64. this._listeners[name] = this._listeners[name] || [];
  65. this._listeners[name].push(fn);
  66. }
  67. }
  68. module.exports = RPCConn;