/****************************************************************************
                RCTS socket class
                -----------------------------------------

    begin      : 2015/05/14
    copyright  : (C) 2005 Solbox Inc.
    author     : Dev Storage Team
    email      : huibong@solbox.com
    version    : 3.5

    CopyRight(C) 2005 Solbox Inc. All Rights reserved.
    Redistribution and use in source and binary forms, with or with out
    modification, are not permitted in outside of Solbox Inc.
*****************************************************************************/

#ifndef __RCTS_SOCKET_H__
#define __RCTS_SOCKET_H__

#include "BaseSocket.h"
#include "ShmDefine.h"
#include "ProtocolDefine.h"

#include <unistd.h>
#include <string>


// CRctsSocket
// 본 클래스는 RCTS 와의 TCP socket 통신을 관리하고....
// Data 를 RCTS 로 전송하는 역활을 수행한다.
class CRctsSocket: public CBaseSocket
{
	public:

		// 생성자
		// - 객체 생성시.. 접속 대상 RCTS 정보 및 통신시 사용할 RC ID 정보를 전달한다.
		CRctsSocket();

		// 소멸자
		~CRctsSocket();

		// 객체 초기화
		// - false : 전달된 인자값 오류시 
		bool Init( const char * szServer, unsigned int uPort, const char * szRcId );
		


		// RCTS 로 수집된 시스템 정보를 전송한다.
		bool SendSystemInfo( const struct SystemInfo * pSystem );

		// RCTS 로 서비스 상태 정보를 전송한다.
		bool SendServiceStatus( std::string & strHostname, const struct ServiceStatus * pService, int & iStorageMaxUsage );
		

	private:

		// RCTS Server 정보
		std::string m_strServer;
		unsigned int m_uPort;

		// 통신 관련 RC ID 정보
		std::string m_strRcId;
		
		// packet header 멤버 변수.
		struct PacketHeader  m_packetHeader;
		// packet header 크기를 저장하기 위한 상수
		const int m_iPacketHeaderLen;

		// system 수집 정보 전송을 위한 data 구조체
		struct PacketDataSystem m_packetDataSystem;

		// service 상태 정보 전송을 위한 data 구조체
		struct PacketDataService m_packetDataService;

		// 전송할 Data 크기 정보를 저장할 멤버변수.
		unsigned int m_uPacketDataLen;



};


#endif /* __RCTS_SOCKET_H__ */

