/****************************************************************************
				rc_balanced content RCDB update thread header 
				-----------------------------------------

	begin      : 2019/03/13
	copyright  : (C) 2005 Solbox Inc.
	author     : huibong
	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 __RCDB_UPDATE_THREAD_H__
#define __RCDB_UPDATE_THREAD_H__

#include <pthread.h>

#include "RebalanceData.h"
#include "DataQueue.hpp"
#include "RcdbInfo.h"


// CRcdbUpdateThread class
// - RCDB update queue 에 들어 있는 content 를 pop 하여...
// - RCDB 에 UPDATE 처리를 수행한 후
// - 최종 해당 Content 를 unlink 처리를 위한 대기 queue 에 push 처리를 수행
class CRcdbUpdateThread
{
	public:

		// 생성자
		CRcdbUpdateThread(
			CDataQueue<CRebalanceData> * const pQueueUpdateStandby
			, CDataQueue<CRebalanceData> * const pQueueDeleteStandby
		);

		// 소멸자
		~CRcdbUpdateThread();

		// Thread 를 생성하여 주기적으로 job 을 처리한다.
		bool Start( void );


	private:

		// Thread handle
		pthread_t m_threadHandle;

		// Thread Loop 마다 Sleep Time 정보를 저장하기 위한 변수
		unsigned int m_uSleep;

		// FHS Copy 처리 완료 후 RCDB 업데이트 대상 content 정보를 저장하는 queueUpdateStandby 객체에 대한 포인터
		CDataQueue<CRebalanceData> * m_pQueueUpdateStandby;

		// unlink 처리 대상 content 정보를 저장하는 queueDeleteStandby 객체에 대한 포인터
		CDataQueue<CRebalanceData> * m_pQueueDeleteStandby;

		// RCDB 연결 정보 관리 객체
		CRcdbInfo m_rcdbInfo;


	private:

		// Thread loop base function
		static void * threadFunc( void * arg );

		// 실제 Content Copy 처리를 control 하는 함수
		void Execute( void );

};

#endif /* __RCDB_UPDATE_THREAD_H__ */

