#ifndef COUNTERPKG_H_DEF
#define COUNTERPKG_H_DEF

#include "TelepatiPkg.h"

using namespace std;

/**Implementa un messaggio di conteggio dei messaggi spediti.
   Messaggio di controllo che contiene informazioni sul numero di
   messaggi spediti e ricevuti, in quest'ultimo caso divisi in
   messatti totali ricevuti e messaggi di dati ricevuti.@n Struttura:
   oltre all'Header Standard contiene tre unsigned int (32bit)
   rappresentanti: messaggi dati ricevuti, messaggi totali ricevuti,
   messaggi totali spediti.*/
class CounterPkg : public TelepatiPkg{
 public:
  /**Costruttore di default. Costruisce un oggetto indirizzato ad un
     Aibo invalido e con i valori di rc, rt e s uguali a 0.*/
  CounterPkg();
  /** Costruttore ordinario. @param recvData Numero di messaggi di
      dati ricevuti . @param recvTotal Numero di messaggi di controllo
      ricevuti. @param send Numero di messaggi spediti.*/
  CounterPkg(unsigned int recvData, unsigned int recvTotal, unsigned int send);
  /** Ricostruisce l'array a partire da l'array di byte restituito da
      getMsg(). @param ptr Array di byte. @see getMsg()*/
  CounterPkg(byte* ptr);
  /** Distruttore di default*/
  virtual ~CounterPkg();

  /** Clonatore. Restituisce un clone dell'oggetto su cui e'
      chiamato.*/
  virtual TelepatiPkg* clone();

  /** Restituisce un array rappresentante l'oggetto. L'array
      restituito viene utilizzato per spedire l'oggetto sia via rete
      sia per lo scambio di messaggi tra oggetti OPENR. @return byte[]
      array di byte che rappresenta l'oggetto @see CounterPkg(const
      byte* ptr)*/  
  byte* getMsg();  
  /** Numero di messaggi Data Ricevuti. @return Numero di messaggi di
      Dati ricevuti.*/
  inline unsigned int getDataRecvMessage() {return rd;};
  /** Numero di messaggi totali ricevuti. @return Totale dei messaggi
      ricevuti.*/
  inline unsigned int getTotalRecvMessage() {return rt;};
  /** Numero di messaggi spediti. @return Numero di messaggi
      spediti.*/
  inline unsigned int getSendMessage() {return s;};

 protected:
  unsigned int rd; /**<Messaggi di dati ricevuti*/
  unsigned int rt; /**<Messaggi di controllo ricevuti*/
  unsigned int s;  /**<Messaggi spediti*/
};

#endif
