#ifndef _STATEPACKETSENDER_H
#define _STATEPACKETSENDER_H


#include "StatePacket.h"

# define LcMsgHeader 'B'
# define SpMsgHeader 'S'

/**
   Encode StatePacket to XDR and write it as part of a UDP socket message.
   NOTE: All 'C' and 'C++' modules in an XDR application must be compiled with 
   Watcom "-Wc,-ei" and "-WC,-ei" options, respectively.
 */
class StatePacketSender {

 public:

  StatePacketSender();

  ~StatePacketSender();

  /** Encode and send state packet. Return 0 on success, else -1 */
  int send(StatePacket *packet, int socket, struct sockaddr_in &addr);
  int send(int32_t id, char type, int socket, struct sockaddr_in &addr);

 protected:
  int sendHeader(char type, int socket, struct sockaddr_in &addr);

  /** Buffer for outgoing data; messge type (first byte)
      XDR byte-count (first bytes 2 and 3, 
      network order) followed by XDR state data. */
  char *_outBuf;

  /** Points to out-going state data in XDR format */
  char *_xdrStateBuf;

  /** XDR memory stream */
  XDR _xdrStream;

};

#endif
