/****************************************************************************
                Main.h for rc_mond
                -----------------------------------------

    begin      : 2015/06/02
    copyright  : (C) 2005 Solbox Inc.
    author     : Dev Storage Team
    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 __RC_MOND_MAIN_H__
#define __RC_MOND_MAIN_H__

#include <unistd.h>
#include <stdlib.h>

#include <string>



#ifdef __cplusplus
extern "C" {
#endif

	/// @brief 사용 방법을 화면에 표시하기 위한 함수.
	void PrintUsage( void );

	/// @brief Version 정보를 화면에 표시하기 위한 함수
	void PrintVersion( void );
	
	/// @brief 현재 Process가 기동중인지 여부를 판단하기 위한 함수( 프로세스 중복 실행 체크)
	/// @return 이미 해당 프로세스가 기동 중인 경우 true 반환, 그렇지 않으면 false 반환.
	bool IsCurrentProcessRun( void );

	/// @brief std 상에 trim 함수가 없어서 직접 구현 아니면 boost/algorithm/string.hpp 상의 boost::trim 함수 사용
	/// @param str [in/out] Trim 할 문자열을 저장한 String 참조변수.
	/// @return void
	void Trim( std::string & str );

	/// @brief 프로세스 종료에 따른 반복적인 종료 관련 작업을 수행하기 위한 함수.
	void ReadyToExit( void );
	
	/// @brief Main 프로세스 signal 처리 설정을 위한 함수	
	/// @return void	
	void SetSignalMain( void );

	/// @brief vmasd 가 전송하는 시스템 정보 수신을 담당할 Worker 프로세스 생성.	
	/// @return 생성 성공시 true, 실패시 false
	bool MakeWorkerRecvVmasd();
	
	/// @brief csagentd 가 전송하는 FHS system 상태 정보 수신을 담당할 Worker 프로세스 생성.
	/// @return 생성 성공시 true, 실패시 false
	bool MakeWorkerRecvSystem();
	
	/// @brief csagentd 가 전송하는 FHS check 상태 정보 수신을 담당할 Worker 프로세스 생성.
	/// @return 생성 성공시 true, 실패시 false
	bool MakeWorkerRecvCheck();
	
	/// @brief 각 Client 의 요청을 수신하여.. Alive FHS 목록 등의 정보 전달을 담당할 Worker 프로세스 생성.
	/// @return 생성 성공시 true, 실패시 false
	bool MakeWorkerSendInfo();
	
	/// @brief 각 FHS 정보의 GMS 전송, Top FHS 정보의 RCDB 업데이트 등을 수행할 Worker 프로세스 생성.
	/// @return 생성 성공시 true, 실패시 false
	bool MakeWorkerControl();

	// FHS vmasd 로 부터 Broadcast 되는 FHS 상태 정보 수신을 위한 UDP Receive Socket 생성
	bool MakeVmasdRecvSocket( void );

	// FHS csagentd 가 전송하는 시스템 상태 정보 수신을 위한 TCP listen socket 생성
	bool MakeSystemRecvSocket( void );

	// FHS csagentd 가 전송하는 서비스 상태 체크 정보 수신을 위한 TCP listen socket 생성
	bool MakeCheckRecvSocket( void );

	// fimngd 등과 같은 외부 모듈과 통신을 통해 정보를 전달하기 위한 TCP listen socket 생성
	bool MakeInfoSendSocket( void );
	
	

#ifdef __cplusplus
}
#endif


#endif /* __RC_MOND_MAIN_H__ */

