text: //========= Copyright Valve Corporation, All rights reserved. ============//
  //
  // Purpose: 
  //=============================================================================//
  
  #ifndef HTML_PROTOBUF
  #define HTML_PROTOBUF
  
  #ifdef _WIN32
  #pragma once
  #endif
  
  #include "tier1/utlbuffer.h"
  #include "html/htmlmessages.h"
  
  namespace google
  {
  	namespace protobuf
  	{
  		class MessageLite;
  	}
  }
  
  class CHTMLBaseProtoBufMsg
  {
  public:
  	void SerializeCrossProc( CUtlBuffer *pBuffer ) const;
  	bool BDeserializeCrossProc( CUtlBuffer *pBuffer );
  
  protected:
  	void *m_pMsg;
  	bool m_bIsValid;
  };
  
  
  //-----------------------------------------------------------------------------
  // Purpose: Base class for protobuf objects
  //-----------------------------------------------------------------------------
  template< typename PB_OBJECT_TYPE > 
  class CHTMLProtoBufMsg : public CHTMLBaseProtoBufMsg
  {
  public:
  	CHTMLProtoBufMsg( EHTMLCommands eMsg )
  	{
  		m_pMsg = new PB_OBJECT_TYPE;
  		m_bIsValid = true;
  	}
  
  	// Construct and deserialize in one
  	CHTMLProtoBufMsg( CUtlBuffer *pBuffer )
  	{
  		m_pMsg = NULL;
  		m_bIsValid = BDeserializeCrossProc( pBuffer );
  	}
  
  	// Destructor
  	virtual ~CHTMLProtoBufMsg()
  	{
  		delete (PB_OBJECT_TYPE *)m_pMsg;
  	}
  
  	bool BIsValid() { return m_bIsValid; }
  
  	// Accessors
  	PB_OBJECT_TYPE &Body() { return *((PB_OBJECT_TYPE*)( (google::protobuf::MessageLite *)m_pMsg )); }
  	const PB_OBJECT_TYPE &BodyConst() const { return *((const PB_OBJECT_TYPE*)( (google::protobuf::MessageLite *)m_pMsg )); }
  
  };
  
  
  #endif // HTML_PROTOBUF
  