import {Base} from "../../../generic/util/Common.js";
import {Channel, Envelop, Message} from "../../../generic/channel/Types.js";
import {ChannelEndPoint} from "../../../generic/channel/ChannelEndPoint.js";
import {NodeJsLogger} from "../../util/role/NodeJsLogger.js";


export class ChildEndPoint extends ChannelEndPoint(NodeJsLogger(Base)) {
    messageListener     : (...args) => any


    doConnect (channel : Channel) : Promise<any> {
        process.addListener('message', this.messageListener = this.onRawChannelMessage.bind(this))

        return Promise.resolve()
    }


    doDisconnect () {
        this.messageListener && process.removeListener('message', this.messageListener)
    }


    sendMessage (message : Message) {
        process.send(message)
    }


    messageToEnvelop (message : Message) : Envelop | undefined {
        return message as Envelop
    }


    envelopToMessage (envelop : Envelop) : Message {
        return envelop as Message
    }
}
