parent-port.ts 790 B

123456789101112131415161718192021222324252627282930
  1. import { EventEmitter } from 'events';
  2. import { MessagePortMain } from '@electron/internal/browser/message-port-main';
  3. const { createParentPort } = process._linkedBinding('electron_utility_parent_port');
  4. export class ParentPort extends EventEmitter {
  5. #port: ParentPort
  6. constructor () {
  7. super();
  8. this.#port = createParentPort();
  9. this.#port.emit = (channel: string | symbol, event: { ports: any[] }) => {
  10. if (channel === 'message') {
  11. event = { ...event, ports: event.ports.map(p => new MessagePortMain(p)) };
  12. }
  13. this.emit(channel, event);
  14. return false;
  15. };
  16. }
  17. start () : void {
  18. this.#port.start();
  19. }
  20. pause () : void {
  21. this.#port.pause();
  22. }
  23. postMessage (message: any) : void {
  24. this.#port.postMessage(message);
  25. }
  26. }