/*
********************************************************
Copyright 2000 MBARI.
MBARI Proprietary Information. All rights reserved.
NOTE: This file is automatically generated.
DO NOT MODIFY.
********************************************************
*/

#ifndef __SmartSamplerIF_SK_H
#define __SmartSamplerIF_SK_H

#include "TaskServer.h"
#include "SmartSamplerIF.h"

class SmartSamplerIF_SK : public TaskServer {

  public:

  // Constructor for server with default name
  SmartSamplerIF_SK();

  // Constructor for server with specific name
  SmartSamplerIF_SK(const char *serverName);

  virtual ~SmartSamplerIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual void dtSuspend(short suspendNum) = 0;
  virtual void dtResume(short resumeNum) = 0;
  virtual void dtReset(short resetNum) = 0;
  virtual void dtNum(short *numDTs) = 0;
  virtual void dtDumpState() = 0;
  virtual void dtDumpState(short dumpNum) = 0;
  virtual void gulperAllocate(short gulperNum, short dtNum) = 0;
  virtual void gulperState(SmartSamplerIF::GulperInfoArrayType gulperInfo) = 0;
  virtual void gulperFire(short gulperNum) = 0;
  virtual void gulperLastFired(double *gulperTime, short *gulperNum) = 0;
  
  // Declare callbacks corresponding to each method
  Boolean dtSuspendCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean dtResumeCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean dtResetCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean dtNumCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean dtDumpStateCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean dtDumpState01Callback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean gulperAllocateCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean gulperStateCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean gulperFireCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  Boolean gulperLastFiredCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

  
  // Message structure pointer for each method
  SmartSamplerIF::DtSuspendMsg *_dtSuspendMsg;
  SmartSamplerIF::DtResumeMsg *_dtResumeMsg;
  SmartSamplerIF::DtResetMsg *_dtResetMsg;
  SmartSamplerIF::DtNumMsg *_dtNumMsg;
  SmartSamplerIF::DtDumpStateMsg *_dtDumpStateMsg;
  SmartSamplerIF::DtDumpState01Msg *_dtDumpState01Msg;
  SmartSamplerIF::GulperAllocateMsg *_gulperAllocateMsg;
  SmartSamplerIF::GulperStateMsg *_gulperStateMsg;
  SmartSamplerIF::GulperFireMsg *_gulperFireMsg;
  SmartSamplerIF::GulperLastFiredMsg *_gulperLastFiredMsg;
  
  // Determine max bytes required for message buffer
  virtual size_t maxRequestBytes();

  // Allocate buffer for messages, set pointers, etc
  virtual void allocateBuffers();

  private:

  // Initializer method called by constructors
  int init();

};

#endif

