//+------------------------------------------------------------------+ //| Message.mqh | //| Copyright 2016, Vasiliy Sokolov, St-Petersburg, Russia | //| https://www.mql5.com/ru/users/c-4 | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, Vasiliy Sokolov." #property link "https://www.mql5.com/ru/users/c-4" #include #include #define UNKNOW_SOURCE "unknown" // обозначение неопределенного источника сообщений //+------------------------------------------------------------------+ //| Тип сообщения | //+------------------------------------------------------------------+ enum ENUM_MESSAGE_TYPE { MESSAGE_INFO, // Информационное сообщение MESSAGE_WARNING, // Предупреждающее сообщение MESSAGE_ERROR // Возникновение ошибки }; //+------------------------------------------------------------------+ //| Сообщение, передаваемое классу логирования | //+------------------------------------------------------------------+ class CMessage : public CObject { private: ENUM_MESSAGE_TYPE m_type; // Тип сообщения string m_source; // Источник сообщения string m_text; // Текст сообщения int m_system_error_id; // Содержит идентификатор СИСТЕМНОЙ ошибки. int m_retcode; // Содержит код возрата торгового сервера. datetime m_server_time; // Время торгового сервера, в момент создания сообщения datetime m_local_time; // Локальное время, в момент создания сообщения void Init(ENUM_MESSAGE_TYPE type,string source,string text); public: CMessage(void); CMessage(ENUM_MESSAGE_TYPE type); CMessage(ENUM_MESSAGE_TYPE type,string source,string text); void Type(ENUM_MESSAGE_TYPE type); ENUM_MESSAGE_TYPE Type(void); void Source(string source); string Source(void); void Text(string text); string Text(void); datetime TimeServer(void); datetime TimeLocal(); void SystemErrorID(int error); int SystemErrorID(); void Retcode(int retcode); int Retcode(void); string ToConsoleType(void); string ToCSVType(void); }; //+------------------------------------------------------------------+ //| По-умолчанию, время создания заполнять не нужно, оно | //| автоматически заполняется во время создания объекта. | //+------------------------------------------------------------------+ CMessage::CMessage(void) { Init(MESSAGE_INFO,UNKNOW_SOURCE,""); } //+------------------------------------------------------------------+ //| Создает сообщение с предустановленным типом, источником сообщения| //| и текстом. | //+------------------------------------------------------------------+ CMessage::CMessage(ENUM_MESSAGE_TYPE type,string source,string text) { Init(type,source,text); } //+------------------------------------------------------------------+ //| Создает сообщение с предустановленным типом. | //+------------------------------------------------------------------+ CMessage::CMessage(ENUM_MESSAGE_TYPE type) { Init(type,UNKNOW_SOURCE,""); } //+------------------------------------------------------------------+ //| Выполняет роль базового конструктора. | //+------------------------------------------------------------------+ void CMessage::Init(ENUM_MESSAGE_TYPE type,string source,string text) { m_server_time= TimeCurrent(); m_local_time = TimeLocal(); m_type=type; m_source=source; m_text=text; m_system_error_id=GetLastError(); } //+------------------------------------------------------------------+ //| Возвращает тип сообщения. | //+------------------------------------------------------------------+ ENUM_MESSAGE_TYPE CMessage::Type(void) { return m_type; } //+------------------------------------------------------------------+ //| Устанавливает источник сообщения. | //+------------------------------------------------------------------+ void CMessage::Source(string source) { m_source=source; } //+------------------------------------------------------------------+ //| Возвращает источник сообщения. | //+------------------------------------------------------------------+ string CMessage::Source(void) { return m_source; } //+------------------------------------------------------------------+ //| Устанавливает содержимое сообщения. | //+------------------------------------------------------------------+ void CMessage::Text(string text) { m_text=text; } //+------------------------------------------------------------------+ //| Возвращает содержимое сообщения. | //+------------------------------------------------------------------+ string CMessage::Text(void) { return m_text; } //+------------------------------------------------------------------+ //| Возвращает время сервера в момент создания сообщения. | //+------------------------------------------------------------------+ datetime CMessage::TimeServer(void) { return m_server_time; } //+------------------------------------------------------------------+ //| Возвращает локальное время в момент создания сообщения. | //+------------------------------------------------------------------+ datetime CMessage::TimeLocal(void) { return m_local_time; } //+------------------------------------------------------------------+ //| Возвращает строку сообщения для вывода в окно терминала. | //+------------------------------------------------------------------+ string CMessage::ToConsoleType(void) { string dt= ";"; string t = EnumToString(m_type); t=StringSubstr(t,8); string text=t+dt+m_source+dt+m_text+dt+ TimeToString(m_server_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS); return text; } //+------------------------------------------------------------------+ //| Возвращает строку сообщения для вывода в файл логирования. | //+------------------------------------------------------------------+ string CMessage::ToCSVType(void) { string d="\t"; //Разделитель колонок сообщения string msg=TimeToString(m_server_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS)+d+EnumToString(m_type)+d+m_source+d+m_text; return msg; } //+------------------------------------------------------------------+ //| Возвращает код сохраненной ошибки. | //+------------------------------------------------------------------+ int CMessage::SystemErrorID(void) { return m_system_error_id; } //+------------------------------------------------------------------+ //| Устанавливает код ошибки, сопутствующий данному сообщению. Код | //| ошибки может быть системным или пользовательским. | //| ВНИМАНИЕ: Установка последней ошибки происходит автоматически, | //| в момент создания сообщения. Поэтому вызывать данный метод | //| требуется лишь в особых случаях. | //+------------------------------------------------------------------+ void CMessage::SystemErrorID(int error) { m_system_error_id=error; } //+------------------------------------------------------------------+ //| Устанавливает код ответа торгового сервера. В отличии от | //| SystemErrorID требует явной установки, т.к CMessage не имеет | //| доступа к ответу торгового сервера. | //+------------------------------------------------------------------+ void CMessage::Retcode(int retcode) { m_retcode=retcode; } //+------------------------------------------------------------------+ //| Возвращает установленный пользователем код ответа торгового | //| сервера. Это поле следует анализировать только в том случае, | //| если получаемое сообщение связано с торговыми действиями. | //+------------------------------------------------------------------+ int CMessage::Retcode(void) { return m_retcode; } //+------------------------------------------------------------------+