/* * ActionLogger.hpp * * Created on: 23 янв. 2022 г. * Author: sozonov */ #ifndef UMLIBRARY_SYSTEMIC_ACTIONLOGGER_HPP_ #define UMLIBRARY_SYSTEMIC_ACTIONLOGGER_HPP_ #include "ValueManager.hpp" #include "../logging/ILoggable.hh" #include "ISignal.hh" #include "IStatus.hh" #include namespace systemic { typedef float SignalValue; //!<Значение сигнала. typedef bool StatusValue; //!<Значение статуса. typedef unsigned short NullMsg; //!<Значение сигнала. class SignalActionLogger : public logging::ILoggable { public: /** * Метод записи структы в лог. */ void logging() { ErrorMessage message; message.signal_value = signal; logger->log_error( reinterpret_cast(&message), sizeof(message) ); } SignalActionLogger( ISignal & _signal ) : signal( _signal ) { } //!Ошибка доступа. struct ErrorMessage { SignalValue signal_value; //!<Значение сигнала на момент записи. }; private: ISignal & signal; }; class TwoSignalActionLogger : public logging::ILoggable { public: /** * Метод записи структы в лог. */ void logging() { ErrorMessage message; message.first_signal_value = signal_f; message.second_signal_value = signal_s; logger->log_error( reinterpret_cast(&message), sizeof(message) ); } TwoSignalActionLogger( ISignal & _signal_1, ISignal & _signal_2 ) : signal_f( _signal_1 ), signal_s( _signal_2 ) { } //!Ошибка доступа. struct ErrorMessage { SignalValue first_signal_value; //!<Значение первого сигнала на момент записи. SignalValue second_signal_value; //!<Значение второго сигнала на момент записи. }; private: ISignal & signal_f; ISignal & signal_s; }; class StatusActionLogger : public logging::ILoggable { public: /** * Метод записи структы в лог. */ void logging() { ErrorMessage message; message.status_value = status; logger->log_error( reinterpret_cast(&message), sizeof(message) ); } StatusActionLogger( IStatus & _status ) : status( _status ) { } //!Ошибка доступа. struct ErrorMessage { StatusValue status_value; //!<Значение статуса на момент записи. }; private: IStatus & status; }; class BinaryDataActionLogger : public logging::ILoggable { public: /** * Метод записи структы в лог. */ void logging() { logger->log_error( reinterpret_cast(custom_data.first), sizeof(custom_data.second) ); } BinaryDataActionLogger( std::pair _cd ) : custom_data( _cd ) { } //!Ошибка доступа. struct ErrorMessage { // char* bin_data; //!<Значение сигнала на момент записи. }; private: std::pair custom_data{ nullptr, 1 }; }; class EmptyMessageActionLogger : public logging::ILoggable { public: /** * Метод записи структы в лог. */ void logging() { ErrorMessage message; message.null = 0u; logger->log_error( reinterpret_cast(&message), sizeof(message) ); } EmptyMessageActionLogger( ) { } //!Ошибка доступа. struct ErrorMessage { NullMsg null; //!<Пустое сообщение. }; private: }; } /* namespace systemic */ #endif /* UMLIBRARY_SYSTEMIC_ACTIONLOGGER_HPP_ */