/***************************************************************************
                   Login Info Inserter class
                -----------------------------------------

	begin      : 2013/09/16
	copyright  : (C) 2005 Solbox Inc.
	author     : Development 1 Team
					- 2013/09/16
	email      : dev1@solbox.com
	version    : 3.2.0

	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 __PROPER_FHS_UDATER__
#define __PROPER_FHS_UDATER__

#include <pthread.h>
#include "Logger.h"
#include "Database.h"
#include "Data.h"
#include "DataQueue.h"


/// @brief CLoginInfoInserter
/// 서비스 리스트를 요청 할 때 Login Info를 생성해서 Queue에 담아두게 되는데..
/// 그 Queue의 정보를 가지고 cs_service.cs_login_log table에 Instert 하는 역할을 한다.
/// 주기는 5분에 한번씩 Insert처리 할 것이 있는지 확인후 있다면 Instert 한다.
/// 
/// 내부적으로 Thread를 사용하고있다. 
class CLoginInfoInserter
{
// Attributes
private:
	// 로깅 파일
	DataBase* m_pPgSQL;
	CQueue<CLoginInfo> *m_pLoginInfo;
   
	// 쓰레드 핸들
	//pthread_t m_threadHandle;
	pthread_t* m_pThreadHandle;
	/// @brief DB connection information
	std::string m_szHost;
	int m_nPort;
	std::string m_szDBName;
	std::string m_szAcct;
	std::string m_szPasswd;

protected:

public:


// Operations
private:
	// 쓰레드 시작 루틴이다.
	static void* EntryPoint(void* arg);
	
	
	// 해당 함수의 내용은 수정하지 말것.
	bool Execute();
	
	// 내부기능 함수들
	bool DbConnect();
	void DbClose();
	
protected:

public:
	/// @brief 생성자
	/// @param [in] pLogger 로깅을 위한 클래스.
	CLoginInfoInserter( CQueue<CLoginInfo> *pLoginInfo );
	~CLoginInfoInserter();
	
	/// @brief 생성자
	/// @param [in]  db info
	/// @return 성공하면 return true 실패하면 return false
	bool Init(const std::string &szHost, const int nPort, const std::string &szDBName, const std::string &szAcct, const std::string &szPasswd);
	
	/// @brief Thread를 생성하고, 이를 시작한다.
	/// @param none
	/// @return 성공은 return true 실패는 return false
	bool Start();
        
};
#endif //__PROPER_FHS_UDATER__ 
