#ifndef SMARTSAMPLER_SERVER_HH
#define SMARTSAMPLER_SERVER_HH

#include "SmartSamplerOutput.hh"
#include "SmartSamplerInput.hh"

#define SmartSamplerServerName "smartSamplerServer"

class SmartSamplerServer :public SmartSamplerIF_SK {
public:
  SmartSamplerServer(const char* name);
  ~SmartSamplerServer();

  // Interface methods defined in SmartSamplerIF_SK
  void dtSuspend(short suspendNum);
  void dtResume(short resumeNum);
  void dtReset(short resetNum);
  void dtNum(short *numDTs);
  void dtDumpState();
  void dtDumpState(short dumpNum);
  void gulperAllocate(short gulperNum, short dtNum);
  void gulperState(SmartSamplerIF::GulperInfoArrayType gulperInfo);
  void gulperFire(short gulperNum);
  void gulperLastFired(double *gulperTime, short *gulperNum);

private:
  const char *driver_name;
  SmartSamplerInput cmd_queue_wr;
  SmartSamplerOutput shared_mem_rd;
  int   spawnAuxTasks();

}; // SmartSamplerServer


#endif // SMARTSAMPLER_SERVER_HH
