#ifndef		_ERROR_MESSAGE_OUPUT_2003_8_6
#define		_ERROR_MESSAGE_OUPUT_2003_8_6
#pragma warning (disable:4949)

#include    <boost/function.hpp>
#include    <boost/bind.hpp>
#include    <functional>
#pragma unmanaged

using	namespace std;

//-------------------------------------------------------------------------------------------------
#define Def_PrintLV1     1	// 訊息輸出
#define Def_PrintLV2     2	// 特殊訊息
#define Def_PrintLV3     3	// 不可能會發生的錯誤, 如玩家發送錯誤封包
#define Def_PrintLV4     4	// 內不不可能產生的問題
#define Def_PrintLV5     5	// 會當

#define LV1				1	// 訊息輸出
#define LV2				2	// 特殊訊息
#define LV3				3	// 不可能會發生的錯誤, 如玩家發送錯誤封包
#define LV4				4	// 內不不可能產生的問題
#define LV5				5	// 會當
//-------------------------------------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------
class	MassageOuputClass
{
	string	_FileName;
public:
	MassageOuputClass( char* File );
	void	Print(char* format,...);
};
//-------------------------------------------------------------------------------------------------
#define BaseOutputFunction  boost::function< void ( int LV , char* Title , char* Context ) >

class PrintClass
{
    int                 _PrintDisplayLV;
    int                 _OuputLV;
    BaseOutputFunction  _OutputFunc;
public:
    PrintClass();
    ~PrintClass();
    void Init( BaseOutputFunction fp );
    void Release( );
    void operator() ( int LV , char* Title , char* format , ... );
    void SetPrintLV( int LV )       { _PrintDisplayLV = LV;};
    void SetOutputLV( int LV )      { _OuputLV = LV;};

};
//-------------------------------------------------------------------------------------------------

extern PrintClass   Print;

#pragma managed
#endif