codeceptjs
Version:
Supercharged End 2 End Testing Framework for NodeJS
48 lines (42 loc) • 1.01 kB
JavaScript
import { isMainThread, parentPort } from 'worker_threads'
import Container from './container.js'
const workerObjects = {}
const shareEvent = 'share'
const invokeWorkerListeners = workerObj => {
const { threadId } = workerObj
workerObj.on('message', messageData => {
if (messageData.event === shareEvent) {
Container.share(messageData.data)
}
})
workerObj.on('exit', () => {
delete workerObjects[threadId]
})
}
class WorkerStorage {
/**
* Add worker object
*
* @api
* @param {Worker} workerObj
*/
static addWorker(workerObj) {
workerObjects[workerObj.threadId] = workerObj
invokeWorkerListeners(workerObj)
}
/**
* Share data across workers
*
* @param {*} data
*/
static share(data) {
if (isMainThread) {
for (const workerObj of Object.values(workerObjects)) {
workerObj.postMessage({ data })
}
} else {
parentPort.postMessage({ data, event: shareEvent })
}
}
}
export default WorkerStorage