/****************************************************************************
                Top FHS update Thread Class
                -----------------------------------------

    begin      : 2015/07/28
    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 __TOP_FHS_UPDATE_THREAD_H__
#define __TOP_FHS_UPDATE_THREAD_H__


#include <pthread.h>
#include <unistd.h>
#include <stdint.h>
#include <vector>

#include "ShmManager.h"
#include "RcdbInfo.h"


/// @brief CTopFhsUpdateThread
/// 본 클래스는 Thread 클래스로서...
/// 주기적으로 공유메모리에 저장된 정보 중 FHS 정보를 추출하여 Top FHS 를 선정한 후 
/// 해당 정보를 RCDB 에 업데이트 한다.
/// - RCDB 와 세션은 필요시 연결 후 해제 처리.
class CTopFhsUpdateThread
{
	public:
	
		// 생성 및 소멸자.
		CTopFhsUpdateThread( CShmManager * pShmManager );
		~CTopFhsUpdateThread();

		// 작업 시작
		bool Start( void );
			
	private:
		
		// Thread function....
		static void * threadFunc( void * arg );

		// 실제 작업을 담당하는 함수.
		void Execute( void );


	private:
		
		// 쓰레드 핸들
        pthread_t m_threadHandle;

		// 공유메모리 접근을 위한 inferface 객체 (생성자를 통해 전달받음)
		CShmManager * m_pShmManager;

		// Top FHS 정보를 저장하기 위한 vector
		// - struct WritableFhsInfo 구조체는 ShmManager.h 에 정의되어 있으며...
		// - score 점수가 낮은 FHS 가 writable, idle 한 FHS 임.
		std::vector<struct WritableFhsInfo> m_vecTopFhs;

		// RCDB 연결 관련 접속 정보를 저장하기 위한 객체
		CRcdbInfo m_rcdbInfo;
		
};

#endif /* __TOP_FHS_UPDATE_THREAD_H__ */
