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

#ifndef __FuelCellIF_SK_H
#define __FuelCellIF_SK_H

#include "TaskServer.h"
#include "FuelCellIF.h"
#include "InstrumentIF_SK.h"

class FuelCellIF_SK : public InstrumentIF_SK {

  public:

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

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

  virtual ~FuelCellIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual DeviceIF::Status start() = 0;
  virtual DeviceIF::Status stop() = 0;
  virtual DeviceIF::Status offline() = 0;
  virtual DeviceIF::Status resume() = 0;
  virtual DeviceIF::Status get_status(FuelCellIF::FCC_status *fcc_status) = 0;
  virtual DeviceIF::Status get_data(FuelCellIF::FCC_data *fcc_data) = 0;
  
  // Declare callbacks corresponding to each method
  Boolean startCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

  
  // Message structure pointer for each method
  FuelCellIF::StartMsg *_startMsg;
  FuelCellIF::StopMsg *_stopMsg;
  FuelCellIF::OfflineMsg *_offlineMsg;
  FuelCellIF::ResumeMsg *_resumeMsg;
  FuelCellIF::Get_statusMsg *_get_statusMsg;
  FuelCellIF::Get_dataMsg *_get_dataMsg;
  
  // 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

