/****************************************************************************
				rc_accessd db update thread header
				-----------------------------------------

	begin      : 2021/04/15
	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_DB_UPDATE_H__
#define __THREAD_DB_UPDATE_H__

#include <pthread.h>

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


// CThreadDbUpdate class
// - content 에 대한 access time 추출 정보를 DB 에 최종 업데이트 처리 수행
// - update 는 uri 단위로 수행하며.. 기존 db 상에 data 가 존재하는 경우...
// - 추출된 time 정보와 db 정보를 비교하여.. 최신 time 정보만 업데이트 처리함.
class CThreadDbUpdate
{

	public:

		CThreadDbUpdate( CDataQueue<CDataAccess> * const pQueue, unsigned int uTargetService );

		~CThreadDbUpdate();

		// 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;


	private:

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

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

		//  DB 상에 access time 정보 update 작업을 수행한다. 
		bool UpdateContentAccessTime( DataBase & db );


};

#endif /* __THREAD_DB_UPDATE_H__ */

