/****************************************************************************
                shared memory date management class
                -----------------------------------------

    begin      : 2015/07/09
    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 __SHM_CLIENT_INFO_H__
#define __SHM_CLIENT_INFO_H__

#include "ShmDefine.h"


#include <string>
#include <map>


// 공유메모리 영역 중 Client 영역에 대한 접근 처리 관련 인터페이스를 제공하기 위한 클래스
class CShmClientInfo
{

	private:
		
		// 공유메모리 영역 중 client 영역에 대한 포인터
		struct ClientInfo * const m_pClient;

		// 서비스 상태 code 에 대한 문자열 정보를 저장하기 위한 변수.
		std::map<int, std::string> m_mapServiceStatString;

		// NEW 2018-01-11 huibong 메모리 사용량 초과시 report 기능 추가 (#31360, #31679)
		// 기능 check 여부 판단을 위한 변수 
		bool m_bReportMemoryMaxUsage;

		// system shared memory update count
		// - 잦은 report 로깅 방지를 위한 count 처리 목적 
		int  m_iShmSystemUpdateCount;


	public:

		// 생성자
		CShmClientInfo( struct ClientInfo * p );

		// 소멸자
		~CShmClientInfo();


	public:

		// 공유 메모리 상태가 유효하지 여부 판단.
		bool IsValid( const char * pClientAddress ) const;
		
		// Service 상태 정보에 대한 문자열 반환.
		const char * GetServiceStatString( const int & stat );

		// 현재 Service 상태 정보에 대한 문자열 반환.
		const char * GetServiceStatString();
		

		// serviceinfo 정보를 공유메모리에 저장 처리.
		// return false : 공유메모리가 유효하지 않은 경우...		
		bool UpdateServiceInfo( std::string & strHostname, int iServiceStat );


		// systeminfo 정보를 공유메모리에 저장 처리.
		// return false : 공유메모리가 유효하지 않거나... valid 가 유효하지 않거나.. hostname 이 동일하지 않은 경우. 
		bool UpdateSystemInfo( std::string & strHostname, struct SystemInfo * pData );
		
		

};


#endif /* __SHM_CLIENT_INFO_H__ */

