public synchronized void sendNow(final Event event) {
    // Expand the event parms
    final EventExpander expander = new EventExpander();
    expander.setEventConfDao(new EmptyEventConfDao());
    expander.expandEvent(event);
    m_pendingEvents++;
    LogUtils.debugf(this, "StartEvent processing (%d remaining)", m_pendingEvents);
    LogUtils.debugf(this, "Received: ", new EventWrapper(event));
    m_anticipator.eventReceived(event);

    final Runnable r =
        new Runnable() {
          public void run() {
            try {
              m_eventWriter.writeEvent(event);
              broadcastNow(event);
              m_anticipator.eventProcessed(event);
            } finally {
              synchronized (MockEventIpcManager.this) {
                m_pendingEvents--;
                LogUtils.debugf(this, "Finished processing event (%d remaining)", m_pendingEvents);
                MockEventIpcManager.this.notifyAll();
              }
            }
          }
        };

    if (isSynchronous()) {
      r.run();
    } else {
      getScheduler().schedule(r, m_eventDelay, TimeUnit.MILLISECONDS);
    }
  }
 public void reset() {
   m_listeners = new ArrayList<ListenerKeeper>();
   m_anticipator.reset();
 }