Skip to content

Latest commit

 

History

History
87 lines (59 loc) · 2.31 KB

README.md

File metadata and controls

87 lines (59 loc) · 2.31 KB

Electron Simple RPC (Remote Procedure Call)

Why?

It is a real PITA to call functions running in another electron thread/process.

This system lets you not only easily call a function running in a different thread but also get a response. Ultimatley, this is a fancy promise wrapper for electron's built-in IPC system. It works the same in any type of electron thread.

Install

npm install electron-simple-rpc

Usage

The RPC system needs to be setup in every electron thread you which to communicate between. A typical example would be.

Main Electron Thread:

  import { RpcIpcManger } from 'rpc';
  
  // Specify the scope (this should be unique)
  const scope = 'electron';
  
  // Create the function lib
  const library = {
    ping = (inputs) => {
      console.log('ping ' + inputs)
      return 'pong from electron'
    }
  }
  
  const rpcIpcManager = new RpcIpcManger(library, scope);
    

Renderer Thread:

  import { RpcIpcManger, rpc } from 'rpc';
  
  // Specify the scope (this should be unique)
  const scope = 'renderer1';
  
  // Create the function lib
  const library = {}
  
  const rpcIpcManager = new RpcIpcManger(library, scope);
  
  // We send an RPC event from renderer -> electron
  rpc('electron', 'ping')('from renderer').then(console.log)
  

Result:

Electron logs out: ping from renderer

Renderer logs outs: pong from electron

Note: This example shows renderer -> electron comms. The code is pretty much identical for renderer -> renderer or electron -> renderer. All you need to do is change the scope.


Functions

RPC Emit

rpc(scope, functionPathInLib)(functionInputs);

This will emit a Remote Procedure Call action (which will travel to all threads). This will run a function if scope is correct.

@param string scope             - The destination threads scope (electron, main-renderer etc)
@param string functionPathInLib - The path to the function in the destination thread's lib
@param any functionInputs       - The function inputs (must be serialisable, i.e. object, string, number etc)

RPC Manager

RpcIpcManger(lib, scope);

This is used to receive and respond to RPC actions received over IPC.

@param object lib   - The function library used with rpc
@param string scope - This thread's scope (electron, main-renderer etc)