/***************************************************************************
                생성된 Cache content 정보를 RCDB 에 저장처리
                -----------------------------------------
    begin      : 2010/03/11
    copyright  : (C) 2010 Solbox Inc.
    author     : storage dev team
    email      : storage.sd@solbox.com
    version    : 3.3

    CopyRight(C) 2010 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 __CACHE_INSERT_H__
#define __CACHE_INSERT_H__

#include <pthread.h>

#include "DataQueue.hpp"
#include "CacheData.h"
#include "CacheJobList.h"
#include "RcdbInfo.h"


// CCacheInsert
// queue 에 저장된 Cache 생성이 완료된 Content 정보를 RCDB 에 INSERT 처리
// 내부적으로 Thread를 사용
class CCacheInsert
{
	public:
		
		// 생성자
		// param [IN] pQueueCacheComplete Cache 생성 완료 Queue 에 대한 포인터
		// param [IN] pListCacheJob Cache 생성 관련 Job List 객체에 대한 포인터		
		CCacheInsert( CDataQueue<CCacheData>* pQueueCacheComplete, CCacheJobList* pCacheJob );
		
		// 소멸자
		~CCacheInsert();

		// 객체 초기화 수행
		bool Init();

		// thread를 생성하여 업무 flow 를 시작.
		bool Start();

	
	private:

		// Cache 생성 완료 저장 Queue 에 대한 포인터
		// - 생성자를 통해 전달받음
		CDataQueue<CCacheData>* m_pQueueCacheComplete;

		// Cache 생성 관련 Job List 객체에 대한 포인터
		// - 생성자를 통해 전달받음
		CCacheJobList* m_pCacheJob;
				
		// 내부 Thread 에 대한 ID
		pthread_t m_threadHandle;

		// RCDB 접속 정보를 저장할 변수.
		CRcdbInfo m_rcdbInfo;
		
		// New 2014-07-09 huibong
		// RCDB 형상변경에 따라 서비스별 Table 분리 여부 판단 flag
		// TODO: 향후 신규 RCDB 형상 적용 완료 후 본 항목 제거 필요.
		// - false : 기존 t_dav_resource 테이블 사용.
		// - ture  : 신규 RCDB 형상 (서비스별 meta table 분리) 사용.
		bool m_bServiceTableSeparate;

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

		// 스레드 함수
		static void* threadFunc( void* arg );

		// 스레드 내에서 각 loop 단위 처리 호출 함수.
		void Execute();

		// Cache 생성이 완료된 Job 내역을 구형 RCDB 형상에 INSERT 처리
		bool InsertToOldDB();

		// Cache 생성이 완료된 Job 내역을 신규 RCDB 형상에 INSERT 처리
		bool InsertToDB();
		
};
#endif // __CACHE_INSERT_H__ 
