Example #1
0
static void *seekerThread(void *seekerThreadArgsVoidStar)
{
   SeekerThreadArgs *seekerThreadArgs =
      static_cast<SeekerThreadArgs *>(seekerThreadArgsVoidStar);
   SeekerCmdLineParser *seekerParser = seekerThreadArgs->seekerParser;
   ACE_Thread_Mutex *startingSeeker = seekerThreadArgs->startingSeeker;
   delete seekerThreadArgs;

   SseArchive::setup();
   SseArchive::SystemLog() << "Seeker started.  " 
                           << SSE_VERSION << endl;

   Scheduler *scheduler = Scheduler::instance();
   Site* site;

   try {

      site = new Site(seekerParser->getDxPort(),
                      seekerParser->getDxArchiverPort(),
                      seekerParser->getChannelizerPort(),
                      seekerParser->getDxArchiver1Hostname(),
                      seekerParser->getDxToArchiver1Port(),
                      seekerParser->getDxArchiver2Hostname(),
                      seekerParser->getDxToArchiver2Port(),
                      seekerParser->getDxArchiver3Hostname(),
                      seekerParser->getDxToArchiver3Port(),
                      seekerParser->getIfcPort(),
                      seekerParser->getTscopePort(),
                      seekerParser->getTsigPort(),
                      seekerParser->getComponentControlPort(),
                      seekerParser->getExpectedComponentsFilename(),
                      seekerParser->getNoUi());

      delete seekerParser;
    
      paraGlobal.setSite(site);  // attach the site to the Text UI
      paraGlobal.act_->setScheduler(scheduler);
      scheduler->setSite(site);

      addActivityTypesToScheduler(scheduler);
      addActStrategyTypesToScheduler(scheduler);
   }
   catch (NssAcceptHandlerException &exception) {
      scheduler->failed();

      stringstream strm;
      strm << "Scheduler failed to start. " << exception.descrip(); 
      SseMessage::log(MsgSender,
                      NSS_NO_ACTIVITY_ID, SSE_MSG_SCHED_FAILED,
                      SEVERITY_ERROR, strm.str(),
                      __FILE__, __LINE__);

      cerr << exception.descrip() 
           << "Warning: failed to start one or more component accept" 
           << " handlers." << endl
           << "Make sure that another copy of this program"
           << " is not already running" << endl
           << "on this machine." << endl
           << "If new component port numbers were specified, "
           << "make sure they're valid."
           << endl;
    
      exit(1);

   }
   catch (SseException &exception) {
      scheduler->failed();

      stringstream strm;
      strm << "Scheduler failed to start. " << exception.descrip(); 
      SseMessage::log(MsgSender,
                      NSS_NO_ACTIVITY_ID, SSE_MSG_SCHED_FAILED,
                      SEVERITY_ERROR, strm.str(),
                      __FILE__, __LINE__);

      cerr << strm.str();

      exit(1);

   }
   catch (...) {
      cerr << "seeker main: caught unknown exception" << endl;
      SseMessage::log(MsgSender,
                      NSS_NO_ACTIVITY_ID, SSE_MSG_EXCEPTION,
                      SEVERITY_ERROR, 
                      "seeker main: caught unknown exception",
                      __FILE__, __LINE__);

      exit(1);
   }

   startingSeeker->release();

   // Prevent the ACE Reactor event loop from exiting prematurely
   // when a system call is interrupted (ie, errno == EINTR)
   // by enabling restart.
   ACE_Reactor::instance()->restart(1);

   //int status =
   ACE_Reactor::run_event_loop();

   SseArchive::SystemLog() << "Seeker done" << endl;

   return 0;
}