/****************************************************************************
				rc_accessd target content select thread header 
				-----------------------------------------

	begin      : 2021/04/12
	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 __THREAD_TARGET_SELECT_H__
#define __THREAD_TARGET_SELECT_H__

#include <pthread.h>

#include "DataAccess.h"
#include "DataQueue.hpp"
#include "Database.h"
#include "RcdbInfo.h"


// CThreadTargetSelect class
// - access time 추출 대상 content 를 DB 로 부터 조회하여....
// - 전달 받은 queue 상에 push 처리
class CThreadTargetSelect
{

	public:
		CThreadTargetSelect( CDataQueue<CDataAccess> * const pQueue , unsigned int uTargetService );

		~CThreadTargetSelect();

		// theread 생성하여 내부 job 을 주기적으로 수행 처리한다.
		bool Start( void );


	private:

		// thread handle
		pthread_t m_threadHandle;

		// thread loop 마다 sleep time 를 저장하기 위한 변수
		unsigned int m_uSleep;

		// 추출된 content 목록을 저장하기 위한 queue 로서... 생성자를 통해 전달받은 queue point 를 의미
		CDataQueue<CDataAccess> * m_pQueue;

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

		// 추출 대상 서비스 정보
		unsigned int m_uTargetService;

		// 추출 구간 처리를 위한 resource_id 정보
		unsigned long long m_ullResourceIdMin;
		unsigned long long m_ullResourceIdMax;
		unsigned long long m_ullResourceIdStart;


	private:

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

		// 실제 content 조회 처리를 담당하는 함수
		void Execute( void );


		// 지정된 Service 에 대해 content 목록을 추출하여 queue 에 저장 처리한다. 
		bool SelectContent( DataBase & db );



};

#endif /* __THREAD_TARGET_SELECT_H__ */

