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

#ifndef __DeviceIF_SK_H
#define __DeviceIF_SK_H

#include "TaskServer.h"
#include "DeviceIF.h"

class DeviceIF_SK : public TaskServer {

  public:

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

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

  virtual ~DeviceIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual void name(DeviceIF::Name name) = 0;
  virtual void serialNumber(DeviceIF::Name id) = 0;
  virtual DeviceIF::Status initialize() = 0;
  virtual DeviceIF::Status powerOn() = 0;
  virtual DeviceIF::Status powerOff() = 0;
  virtual DeviceIF::Status status() = 0;
  
  // Declare callbacks corresponding to each method
  Boolean nameCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

  
  // Message structure pointer for each method
  DeviceIF::NameMsg *_nameMsg;
  DeviceIF::SerialNumberMsg *_serialNumberMsg;
  DeviceIF::InitializeMsg *_initializeMsg;
  DeviceIF::PowerOnMsg *_powerOnMsg;
  DeviceIF::PowerOffMsg *_powerOffMsg;
  DeviceIF::StatusMsg *_statusMsg;
  
  // 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

