public expose()

in src/rpc.ts [136:173]


  public expose<T>(method: string, handler: (params: T) => Promise<any> | any): this {
    this.on(method, (data: IRPCMethod<T>) => {
      if (data.discard) {
        handler(data.params);
        return;
      }

      // tslint:disable-next-line
      new Promise(resolve => resolve(handler(data.params)))
        .then(
          result =>
            ({
              type: 'reply',
              serviceID: this.options.serviceId,
              id: data.id,
              result,
            } as IRPCReply<any>),
        )
        .catch(
          (err: Error) =>
            ({
              type: 'reply',
              serviceID: this.options.serviceId,
              id: data.id,
              error:
                err instanceof RPCError
                  ? err.toReplyError()
                  : { code: 0, message: err.stack || err.message },
            } as IRPCReply<any>),
        )
        .then(packet => {
          this.emit('sendReply', packet);
          this.post(packet);
        });
    });

    return this;
  }