siesta-lite
Version:
Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers
48 lines (30 loc) • 1.31 kB
text/typescript
import {Base, Constructable, Mixin} from "../../../generic/util/Common.js";
import {Channel, Envelop, EnvelopId, Message} from "../../../generic/channel/Types.js";
import {ChannelEndPoint} from "../../../generic/channel/ChannelEndPoint.js";
import {ChildProcess} from "child_process";
import {NodeJsLogger} from "../../util/role/NodeJsLogger.js";
export const ParentEndPoint = class extends ChannelEndPoint(NodeJsLogger(Base)) {
childProcess : ChildProcess
messageListener : (...args) => any
doConnect (channel : Channel) {
const childProcess = this.childProcess = channel
childProcess.addListener('message', this.messageListener = this.onRawChannelMessage.bind(this))
childProcess.on('exit', () => {
this.debug('NodeJS worker process exit')
this.doDisconnect()
});
return Promise.resolve()
}
doDisconnect () {
this.messageListener && this.childProcess.removeListener('message', this.messageListener)
}
sendMessage (message : Message) {
this.childProcess.send(message)
}
messageToEnvelop (message : Message) : Envelop | undefined {
return message as Envelop
}
envelopToMessage (envelop : Envelop) : Message {
return envelop as Message
}
}