CatalogParser.h 3.62 KB
#ifndef MSG_NOTIFY_MSG_HPP_
#define MSG_NOTIFY_MSG_HPP_

#include "GBMessage.h"
#include <vector>

#include "../sip_header.h"

class CCatalogParser : public CGBMessage
{
public:
	CCatalogParser()
	{
	}

public:
	bool Encode( std::string &message );

	std::vector<DeviceInfo>  DecodeCatlog(const char* body);

	DeviceInfo  DecodeDeviceInfo(const char* body);

	ServerInfo DecodeServerConfig(const char* body);

	static std::string GetStrName(EEventType eType)
	{
		switch (eType)
		{
		case EVENT_ON:
			return "ON";
		case EVENT_OFF:
			return "OFF";
		case EVENT_VLOST:
			return "VLOST";
		case EVENT_DEFECT:
			return "DEFECT";
		case EVENT_ADD:
			return "ADD";
		case EVENT_DEL:
			return "DEL";
		case EVENT_UPDATE:
			return "UPDATE";
		default: //EVENT_UNKNOW
			return "UNKNOW";
		}

		return "UNKNOW";
	}

	EEventType GetEnumName(const std::string &sType)
	{
		if (sType == "ON")
			return EVENT_ON;
		if (sType == "OFF")
			return EVENT_OFF;
		if (sType == "VLOSE")
			return EVENT_VLOST;
		if (sType == "DEFECT")
			return EVENT_DEFECT;
		if (sType == "ADD")
			return EVENT_ADD;
		if (sType == "DEL")
			return EVENT_DEL;
		if (sType == "UPDATE")
			return EVENT_UPDATE;

		return EVENT_UNKNOW;

	}


public:

	inline const std::string& GetSN() const
	{
		return m_sn;
	}

	inline const std::string& GetDeviceID() const
	{
		return m_deviceid;
	}

	inline void SetDeviceID( const std::string &deviceid )
	{
		m_deviceid = deviceid;
	}

	inline void SetSN( const std::string &sn )
	{
		m_sn = sn;
	}

	inline const std::string& GetStatus() const
	{
		return m_status;
	}

	inline void SetStatus( const std::string &status )
	{
		m_status = status;
	}

	inline int GetSum() const
	{
		return m_sum;
	}

	inline void SetSum( int sum )
	{
		m_sum = sum;
	}

	inline const std::vector< DeviceInfo >& GetDevices() const
	{
		return m_devices;
	}

	inline void AddEvent(const std::string &id, EEventType eventType)
	{
		DeviceInfo catalog;
		catalog.id = id;
		catalog.event = eventType;
		m_devices.push_back( catalog );
	}

	inline void AddOnEvent( const std::string &id )
	{
		DeviceInfo catalog;
		catalog.id = id;
		catalog.event = EVENT_ON;
		m_devices.push_back( catalog );
	}

	inline void AddOffEvent( const std::string &id )
	{
		DeviceInfo catalog;
		catalog.id = id;
		catalog.event = EVENT_OFF;
		m_devices.push_back( catalog );
	}

	inline void AddVLostEvent( const std::string &id )
	{
		DeviceInfo catalog;
		catalog.id = id;
		catalog.event = EVENT_VLOST;
		m_devices.push_back( catalog );
	}

	inline void AddDefectEvent( const std::string &id )
	{
		DeviceInfo catalog;
		catalog.id = id;
		catalog.event = EVENT_DEFECT;
		m_devices.push_back( catalog );
	}

	inline void AddDelEvent( const std::string &id )
	{
		DeviceInfo catalog;
		catalog.id = id;
		catalog.event = EVENT_DEL;
		m_devices.push_back( catalog );
	}

	inline void AddAddEvent( const DeviceInfo &catalog )
	{
		if( catalog.event == EVENT_ADD )
		{
			m_devices.push_back( catalog );
		}
	}

	inline void AddUpdateEvent( const DeviceInfo &catalog )
	{
		if( catalog.event == EVENT_UPDATE )
		{
			m_devices.push_back( catalog );
		}
	}

private:
	std::vector< DeviceInfo > Decode(const std::vector< tinyxml2::XMLNode* >& nodes);
	string getItemValue(tinyxml2::XMLNode *pItem);

private:
	std::string                  m_sn;
	std::string                  m_deviceid;
	std::string                  m_status;
	int                          m_sum;
	std::vector< DeviceInfo >        m_devices;
};

#endif // MSG_NOTIFY_MSG_HPP_