/** \file
 *
 *  Contains the LcmSlateBridge class definition.
 *
 *  Copyright (c) 2007,2008,2009,2020 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 *
 */

#ifndef LCMSLATEBRIDGE_H_
#define LCMSLATEBRIDGE_H_

#include "data/SlateBridge.h"
#include "data/LcmListener.h"

/**
 * LcmSlateBridge
 * Provides a flexible interface to Slate data writers.
 *
 *  \ingroup data
 */
class LcmSlateBridge: public SlateBridge, public LcmListener
{
public:

    LcmSlateBridge( Component* owner, const Str& channel, lcm::LCM* lcm = NULL, short sourceID = ANY_SOURCE );

    /// Destructor
    virtual ~LcmSlateBridge();

    void handleMessage( const lcm::ReceiveBuffer *rbuf,
                        const std::string &chan,
                        const TethysLcmTypes::LrauvLcmMessage *msg );

protected:

    bool slateWrite( const TethysLcmTypes::IntArray *array, const Timestamp& timestamp );

    bool slateWrite( const TethysLcmTypes::FloatArray *array, const Timestamp& timestamp );

    bool slateWrite( const TethysLcmTypes::DoubleArray *array, const Timestamp& timestamp );

    bool slateWrite( const TethysLcmTypes::ByteArray *array, const Timestamp& timestamp );

    bool debug_;
};


#endif /*SLATEBRIDGE_H_*/
