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

#ifndef __DockIF_SK_H
#define __DockIF_SK_H

#include "TaskServer.h"
#include "DockIF.h"
#include "InstrumentIF_SK.h"

class DockIF_SK : public InstrumentIF_SK {

  public:

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

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

  virtual ~DockIF_SK();
  
  protected:

  // These methods must be defined in subclass
  virtual Boolean ready() = 0;
  virtual DeviceIF::Status request_vehicle_status() = 0;
  virtual DeviceIF::Status read_vehicle_PIC(DockIF::String512 pic_status, TimeIF::TimeSpec *sampleTime) = 0;
  virtual DeviceIF::Status request_dock_status() = 0;
  virtual DeviceIF::Status set_dock_state(DockIF::String32 state) = 0;
  virtual DeviceIF::Status read_dock_PIC(DockIF::String512 pic_status, TimeIF::TimeSpec *sampleTime) = 0;
  virtual DeviceIF::Status query_resolver() = 0;
  virtual DeviceIF::Status read_resolver(DockIF::String32 state, TimeIF::TimeSpec *sampleTime) = 0;
  virtual DeviceIF::Status query_probe() = 0;
  virtual DeviceIF::Status read_probe(DockIF::String32 state, TimeIF::TimeSpec *sampleTime) = 0;
  virtual DeviceIF::Status move_probe(DockIF::String32 probeCmd) = 0;
  virtual DeviceIF::Status set_continuous_query(Boolean state, short timeOut) = 0;
  virtual DeviceIF::Status read_continuous_query(Boolean *networkPresent, DockIF::String32 probeStatus, DockIF::String32 resolverStatus, double *sampleTime) = 0;
  virtual DeviceIF::Status open_port() = 0;
  virtual DeviceIF::Status close_port() = 0;
  virtual DeviceIF::Status ping(short timeOut) = 0;
  virtual DeviceIF::Status ping_result(short *pingError, double *sampleTime) = 0;
  
  // Declare callbacks corresponding to each method
  Boolean readyCallback(Request *request, int nReqBytes,
                 Reply **reply, int *nReplyBytes);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  
  // Message structure pointer for each method
  DockIF::ReadyMsg *_readyMsg;
  DockIF::Request_vehicle_statusMsg *_request_vehicle_statusMsg;
  DockIF::Read_vehicle_PICMsg *_read_vehicle_PICMsg;
  DockIF::Request_dock_statusMsg *_request_dock_statusMsg;
  DockIF::Set_dock_stateMsg *_set_dock_stateMsg;
  DockIF::Read_dock_PICMsg *_read_dock_PICMsg;
  DockIF::Query_resolverMsg *_query_resolverMsg;
  DockIF::Read_resolverMsg *_read_resolverMsg;
  DockIF::Query_probeMsg *_query_probeMsg;
  DockIF::Read_probeMsg *_read_probeMsg;
  DockIF::Move_probeMsg *_move_probeMsg;
  DockIF::Set_continuous_queryMsg *_set_continuous_queryMsg;
  DockIF::Read_continuous_queryMsg *_read_continuous_queryMsg;
  DockIF::Open_portMsg *_open_portMsg;
  DockIF::Close_portMsg *_close_portMsg;
  DockIF::PingMsg *_pingMsg;
  DockIF::Ping_resultMsg *_ping_resultMsg;
  
  // 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

