protected function post_process($filename)
 {
     echo "post processing {$filename}...\n";
     // Use the caching version via Dependency Injection. This means that all
     // new SSLTracks created using a SSLTrackFactory will get a RuntimeCachingSSLTrack
     // that knows how to ask the cache about expensive lookups (such as getID3 stuff).
     Inject::map('SSLTrackFactory', new SSLTrackCache());
     $ts = new InstantTickSource();
     $hfm = new SSLHistoryFileReplayer($filename);
     $ism = new ImmediateScrobbleModel();
     // deal with PLAYED tracks one by one
     $ts->addTickObserver($hfm);
     $hfm->addExitObserver($ts);
     $hfm->addDiffObserver($ism);
     // get the PluginWrapper that wraps all other plugins.
     $pw = $this->plugin_manager->getObservers();
     // add all of the PluginWrappers to the various places.
     $ts->addTickObserver($pw[0]);
     $hfm->addDiffObserver($pw[0]);
     $ism->addScrobbleObserver($pw[0]);
     $this->plugin_manager->onStart();
     // Tick tick tick. This only returns if a signal is caught
     $ts->startClock($this->sleep);
     $this->plugin_manager->onStop();
 }