async dispatchMessageLocally_(payload) {
    if (this.debug_)
      console.log('\nDISPATCH', payload);
    // Dispatch the response.
    if (typeof payload.rid === 'number') {
      const {fulfill, reject} = this.callbacks_.get(payload.rid);
      this.callbacks_.delete(payload.rid);
      if (payload.e)
        reject(new Error(payload.e));
      else
        fulfill(payload.r);
      return;
    }

    const message = { from: payload.to, rid: payload.id, to: payload.from };
    const handle = this.idToHandle_.get(payload.to[1]);
    if (!handle) {
      message.e = 'Object has been diposed.';
    } else {
      try {
        message.r = await handle.dispatchMessage_(payload.message);
      } catch (e) {
        message.e = e.toString() + '\n' + e.stack;
      }
    }
    this.routeMessage_(false, message);
  }
Message is routed from other worlds and hits rpc here.

@param {!Object} payload