code: protected void dispatchEvent (DEvent event)
      {
  //         Log.info("Dispatching event: " + evt);
  
          // look up the object on which we're dispatching this event
          int remoteOid = event.getTargetOid();
          DObject target = _ocache.get(remoteOid);
          if (target == null) {
              if (!_dead.containsKey(remoteOid)) {
                  log.warning("Unable to dispatch event on non-proxied object " + event + ".");
              }
              return;
          }
  
          // because we might be acting as a proxy for a remote server, we may need to fiddle with
          // this event before we dispatch it
          _client.convertFromRemote(target, event);
  
          // if this is a compound event, we need to process its contained events in order
          if (event instanceof CompoundEvent) {
              // notify our proxy subscribers in one fell swoop
              target.notifyProxies(event);
  
              // now break the event up and dispatch each event to listeners individually
              List<DEvent> events = ((CompoundEvent)event).getEvents();
              int ecount = events.size();
              for (int ii = 0; ii < ecount; ii++) {
                  dispatchEvent(remoteOid, target, events.get(ii));
              }
  
          } else {
              // forward to any proxies (or not if we're dispatching part of a compound event)
              target.notifyProxies(event);
  
              // and dispatch the event to regular listeners
              dispatchEvent(remoteOid, target, event);
          }
      }
docs: Called when a new event arrives from the server that should be dispatched to subscribers
  here on the client.