#include "PeriodicTask.h"
#include "TerrainAidIF.h"
#include "Syslog.h"

class sTask : public PeriodicTask {

public:

  sTask();
  ~sTask();

  void trnSwitchCallback(TaskInterface *taskInterface, EventCode eventCode);

protected:

  TerrainAidIF* _server;

};


sTask::sTask()
   : PeriodicTask("switch")
{
   Syslog::write("sTask::sTask - ctor create interface to server");
   try 
   {
     _server = new TerrainAidIF(TerrainAidIFServerName);
     _eventService->subscribe(_server, TerrainAidIF::TrnOn,
          (EventService::Callback)sTask::trnSwitchCallback);

     _eventService->subscribe(_server, TerrainAidIF::TrnOff,
          (EventService::Callback)sTask::trnSwitchCallback);
   } 
   catch(...)
   {
     Syslog::write("sTask:: -- Failed to initialize connection "
       "to TerrainAidIF");
     _server = NULL;
   }

   Syslog::write("sTask::sTask - ctor complete");
}

sTask::~sTask()
{
  if (_server) delete _server;
}

// Handle TrnOn and TrnOff events
//
void sTask::trnSwitchCallback(TaskInterface *taskInterface,
   EventCode eventCode)
{
   Syslog::write("sTask::trnSwitchCallback - event %d", eventCode);
   if (eventCode == TerrainAidIF::TrnOn)
     Syslog::write("sTask::trnSwitchCallback - TrnOn");
   else if (eventCode == TerrainAidIF::TrnOff)
     Syslog::write("sTask::trnSwitchCallback - TrnOff");
   else
      Syslog::write("sTask::trnSwitchCallback - unknown event %d",
         eventCode);
}

int main(int argc, char **argv)
{
  sTask *terrainAid = new sTask();
  terrainAid->run();
  return 0;
}
