#ifndef _ACK_H
#define _ACK_H

#include "ModemMessage.h"

class Ack : public MMConvertible
{
 public:
    Ack(const ModemMessage* pMM);
    Ack(int iBlobHandle);

    // Overrides
    virtual ModemMessage::Type tGetMessageType() const { return ModemMessage::tACK; };
    virtual Priority pGetDefaultPriority() const { return pMETA; };  
    // Acks must be higher priority than anything else to keep a panicked
    //  set of URGENT message from swamping them out in ultra-low bandwidth
    //  situations.  Luckily, the worse the connection, the fewer ACKs!
  
    virtual const char* pcRead(const char* sourceBuffer);
    virtual char *pcWrite(char * destBuffer) const;

    // Accessors.
    virtual int iGetBlobHandle() const { return _iHandle; };

    /////////////////////////////////////////////////////////////////
    // VARIABLES
 protected:
	 int _iHandle;
};


/*
class MMOnceAck : public Ack
{
 public:
  MMOnceAck(const ModemMessage* pMM) : Ack(pMM) {};
  MMOnceAck(int iHandle) : Ack(iHandle) {};

  virtual ModemMessage::Type tGetMessageType() const { return ModemMessage::tMMOnceAck; };
  virtual ModemMessage::ControlType ctGetDefaultControlType() const 
  { return ModemMessage::ctAck; }

  virtual int iGetBlobHandle() const { Assert(false); return 0; };
  virtual int iGetMessageHandle() const { return _iHandle; };
  
};

class MMOnceReack : public MMOnceAck
{
 public:
  MMOnceReack(const ModemMessage* pMM) : MMOnceAck(pMM) {};
  MMOnceReack(int iHandle) : MMOnceAck(iHandle) {};


  virtual ModemMessage::Type tGetMessageType() const { return ModemMessage::tMMOnceReack; };
};
*/

#endif 
