itns-sidechain/lib/workers/parent-browser.js

87 lines
1.6 KiB
JavaScript
Raw Normal View History

2017-07-07 00:34:59 -07:00
/*!
* parent.js - worker processes for bcoin
* Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).
* https://github.com/bcoin-org/bcoin
*/
'use strict';
const assert = require('assert');
const EventEmitter = require('events');
/**
2017-11-16 20:26:28 -08:00
* Parent
2017-07-07 00:34:59 -07:00
* Represents the parent process.
* @alias module:workers.Parent
2017-11-16 20:26:28 -08:00
* @extends EventEmitter
2017-07-07 00:52:13 -07:00
* @ignore
2017-07-07 00:34:59 -07:00
*/
2017-11-16 20:26:28 -08:00
class Parent extends EventEmitter {
/**
* Create the parent process.
* @constructor
*/
2017-07-07 00:34:59 -07:00
2017-11-16 20:26:28 -08:00
constructor() {
super();
2017-07-07 00:34:59 -07:00
2017-11-16 20:26:28 -08:00
this.init();
}
2017-07-07 00:34:59 -07:00
2017-11-16 20:26:28 -08:00
/**
* Initialize master (web workers).
* @private
*/
init() {
global.onerror = (event) => {
this.emit('error', new Error('Worker error.'));
};
global.onmessage = (event) => {
let data;
if (typeof event.data === 'string') {
data = Buffer.from(event.data, 'hex');
assert(data.length === event.data.length / 2);
} else {
assert(event.data && typeof event.data === 'object');
assert(event.data.data && typeof event.data.data.length === 'number');
data = event.data.data;
data.__proto__ = Buffer.prototype;
}
this.emit('data', data);
};
}
2017-07-07 00:34:59 -07:00
2017-11-16 20:26:28 -08:00
/**
* Send data to parent process.
* @param {Buffer} data
* @returns {Boolean}
*/
2017-07-07 00:34:59 -07:00
2017-11-16 20:26:28 -08:00
write(data) {
if (global.postMessage.length === 2) {
data.__proto__ = Uint8Array.prototype;
global.postMessage({ data }, [data]);
2017-07-07 00:34:59 -07:00
} else {
2017-11-16 20:26:28 -08:00
global.postMessage(data.toString('hex'));
2017-07-07 00:34:59 -07:00
}
2017-11-16 20:26:28 -08:00
return true;
2017-07-07 00:34:59 -07:00
}
2017-11-16 20:26:28 -08:00
/**
* Destroy the parent process.
*/
2017-07-07 00:34:59 -07:00
2017-11-16 20:26:28 -08:00
destroy() {
global.close();
}
}
2017-07-07 00:34:59 -07:00
/*
* Expose
*/
module.exports = Parent;