docs: public synchronized Response getSnapshot(final String idRegex,
        final long start, final long end, String... attributes) {
      SnapshotRequestMessage req = new SnapshotRequestMessage();
      req.setIdRegex(idRegex);
      req.setBeginTimestamp(start);
      req.setEndTimestamp(end);
      if (attributes != null) {
        req.setAttributeRegexes(attributes);
      }
      Response resp = new Response(this, 0);
      try {
        while (!this.isReady) {
          log.debug("Trying to wait until connection is ready.");
          synchronized (this) {
            try {
              this.wait();
            } catch (InterruptedException ie) {
              // Ignored
            }
          }
        }
        long reqId = this.wmi.sendMessage(req);
        resp.setTicketNumber(reqId);
        this.outstandingSnapshots.put(Long.valueOf(reqId), resp);
  
        WorldState ws = new WorldState();
        this.outstandingStates.put(Long.valueOf(reqId), ws);
        log.info("Binding Tix #{} to {}", Long.valueOf(reqId), resp);
        return resp;
      } catch (Exception e) {
        log.error("Unable to send " + req + ".", e);
        resp.setError(e);
        return resp;
      }
    }