/***************************************************************************
                Process Status class
                -----------------------------------------
    begin      : 2010/03/05
    copyright  : (C) 2005 SolutionBox Inc.
    author     : Service 1 Team
    email      : tael@solbox.com
    version    : 1.0

    CopyRight(C) 2005 SolutionBox Inc. All Rights reserved.
    Redistribution and use in source and binary forms, with or with out
    modification, are not permitted in outside of SolutionBox Inc.
***************************************************************************/
// TODO: comment 보완

#ifndef __PROCESS_STATUS_H__
#define __PROCESS_STATUS_H__

#include <string>
#include <map>

using namespace std;

/// @brief CProcessStatus class. 현재 송신/수신 중인 갯수를 관리하는 클래스.
class CProcessStatus
{
	public :
		CProcessStatus();
		~CProcessStatus();

		/// @brief 현재 설정된 Send Count 값을 가져온다.
		/// @return 성공은 SendCount, 그 외에는 음수 값
		int GetSendCount(void);
		
		/// @brief Send Count를 설정한다.
		/// @param nSendCount [in] Send Count를 설정한다.
		/// @return 성공은 return true, 그 외에는 return false
		bool SetSendCount(const int nSendCount); // TODO: NOT USED, remove it 
		
		/// @brief 
		/// @return 성공은 return true, 그 외에는 return false
		bool AddSendCount(void);
		/// @brief 
		/// @return 성공은 return true, 그 외에는 return false
		bool SubtractSendCount(void);

		/// @brief 현재 설정된 ReceiveCount 값을 가져온다.
		/// @return 성공은 ReceiveCount, 그 외에는 음수 값
		int GetReceiveCount(void);
		
		/// @brief 현재 설정된 Receive Count 값을 가져온다.
		/// @param nReceiveCount [in] Receive Count를 설정한다.
		/// @return 성공은 m_nReceiveCount, 그 외에는 음수 값
		bool SetReceiveCount(const int nReceiveCount);// TODO: NOT USED, remove it 
		
		/// @brief 
		/// @return 성공은 return true, 그 외에는 return false
		bool AddReceiveCount(void);
		
		/// @brief 
		/// @return 성공은 return true, 그 외에는 return false
		bool SubtractReceiveCount(void);

		/// @brief 현재 설정된 TransferRate 값을 가져온다. 0~100까지의 값을 가진다.
		/// @return 성공은 m_nTransferRate, 그 외에는 음수 값
		int GetTransferRate(void);
		
		/// @brief 현재 설정된 Transfer Rate 값을 설정한다. ( 0~100 )
		/// @param nTransferRate [in] 설정된 전송률을 설정한다. ( 0~100 )
		/// @return 성공은 m_nReceiveCount, 그 외에는 음수 값
		bool SetTransferRate(const int nTransferRate);
	
	private :
		/// @brief 현재 프로세스 타이틀을 업데이트 한다. (SndCnt,RcvCnt정보를 포함한다.) (FreeBSD Only)
		void UpdateTitle(void);
		
		/// @brief 현재 전송중인 개수를 저장. 0보다 큰 값을 가지게 된다.
		int m_nSendCount;
		
		/// @brief 현재 수신중인 개수를 저장. 0보다 큰 값을 가지게 된다.
		int m_nReceiveCount;
		
		/// @brief 현재 설정된 전송률을 저장. 정수 단위로 0~100까지의 값을 가지게 된다.
		int	m_nTransferRate;

		pthread_mutex_t m_mx_nSendCount   ;
		pthread_mutex_t m_mx_nReceiveCount;
		pthread_mutex_t m_mx_nTransferRate;

}; // ~class CProcessStatus

#endif // __PROCESS_STATUS_H__
