routeMessage_(fromParent, payload) {
    if (this.debug_)
      console.log(`\nROUTE[${this.worldId_}]`, payload);

    if (payload.cookie) {
      this.worldId_ = payload.worldId;
      this.cookieCallback_(this.unwrap_(payload.args));
      this.cookieCallback_ = null;
      return;
    }

    // If this is a cookie request, the world is being initialized.
    if (payload.cookieResponse) {
      const callback = this.cookieResponseCallbacks_.get(payload.worldId);
      this.cookieResponseCallbacks_.delete(payload.worldId);
      callback({ result: this.unwrap_(payload.r), worldId: payload.worldId });
      return;
    }

    if (!fromParent && !this.isActiveWorld_(payload.from[0])) {
      // Dispatching from the disposed world.
      if (this.debug_)
        console.log(`DROP ON THE FLOOR`);
      return;
    }

    if (payload.to[0] === this.worldId_) {
      if (this.debug_)
        console.log(`ROUTED TO SELF`);
      this.dispatchMessageLocally_(payload);
      return;
    }

    for (const [worldId, worldSend] of this.worlds_) {
      if (payload.to[0].startsWith(worldId)) {
        if (this.debug_)
          console.log(`ROUTED TO CHILD ${worldId}`);
        worldSend(payload);
        return;
      }
    }

    if (payload.to[0].startsWith(this.worldId_)) {
      // Sending to the disposed world.
      if (this.debug_)
        console.log(`DROP ON THE FLOOR`);
      return;
    }

    if (this.debug_)
      console.log(`ROUTED TO PARENT`);
    this.sendToParent_(payload);
  }
Routes message between the worlds.

@param {!Object} payload