/***************************************************************************
                접속 요청 Client 에 대한 처리를 담당하는 Thread class
                -----------------------------------------
    begin      : 2014/09/12
    copyright  : (C) 2005 Solbox Inc.
    author     : storage dev team
    email      : storage.sd@solbox.com
    version    : 3.4

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


#include <pthread.h>
#include <string>

#include "ProcessStatus.h"
#include "ProcessSocketControl.h"


// CClientThread
// rc_syncd 에서 accept 처리한 각 client 세션을 처리하기 위한 Thread class
class CClientThread
{
	public:

		// 생성자
		CClientThread( CProcessStatus * pStatus, int clientSocket, char * pszClientAddress );

		// 소멸자
		~CClientThread();

		// thread 를 생성하여 처리 업무 flow start
		bool Start();


		
	private:

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

		// client request 요청을 수신하여 이에 따른 job 을 수행
		void Execute();
		
		// Client로 부터 Sync 요청 수신시 이를 처리하기 위한 함수.
		void ClientRequestSync();
		
		// Content 목록 정보 요청 ( Slave Mode ) 인 경우 이를 처리하기 위한 함수.
		void ProcessContentList();

		// Content 동기화 요청 ( Sync Mode ) 인 경우 이를 처리하기 위한 함수.
		void ProcessContentSync();
		

	private:

		// 쓰레드 핸들
        pthread_t m_threadHandle;

		// 프로세스 상태를 관리하는 CProcessStatus 객체에 대한 포인터
		// - 생성자를 통해 전달받음        
		CProcessStatus * m_pProcessStatus;
		
		// Client Socket discriptor
		// - 생성자를 통해 전달받음.
		int m_socketClientDesc;

		// client 와 통신 관련 처리를 수행하기 위한 control 객체
		CProcessSocketControl m_client;
	
		// Client IP Address
		// - 생성자를 통해 전달받음
		std::string m_strClientIp;


};

#endif /* __CLIENT_THREAD_H__ */

