#ifndef TIER2_LOGGING_H #define TIER2_LOGGING_H #if defined( COMPILER_MSVC ) #pragma once #endif #include "logging.h" const int MAX_SIMULTANEOUS_LOGGING_FILE_COUNT = 16; const int INVALID_LOGGING_FILE_HANDLE = -1; typedef int LoggingFileHandle_t; typedef void* FileHandle_t; #define FILELOGGINGLISTENER_INTERFACE_VERSION "FileLoggingListener001" abstract_class IFileLoggingListener : public ILoggingListener { public: virtual void Log(const LoggingContext_t * pContext, const char* pMessage) = 0; virtual LoggingFileHandle_t BeginLoggingToFile(const char* pFilename, const char* pOptions, const char* pPathID = NULL) = 0; virtual void EndLoggingToFile(LoggingFileHandle_t fileHandle) = 0; virtual void AssignLogChannel(LoggingChannelID_t channelID, LoggingFileHandle_t loggingFileHandle) = 0; virtual void UnassignLogChannel(LoggingChannelID_t channelID) = 0; virtual void AssignAllLogChannels(LoggingFileHandle_t loggingFileHandle) = 0; virtual void UnassignAllLogChannels() = 0; }; class CFileLoggingListener : public IFileLoggingListener { public: CFileLoggingListener(); ~CFileLoggingListener(); virtual void Log(const LoggingContext_t* pContext, const char* pMessage); virtual LoggingFileHandle_t BeginLoggingToFile(const char* pFilename, const char* pOptions, const char* pPathID = NULL); virtual void EndLoggingToFile(LoggingFileHandle_t fileHandle); virtual void AssignLogChannel(LoggingChannelID_t channelID, LoggingFileHandle_t loggingFileHandle); virtual void UnassignLogChannel(LoggingChannelID_t channelID); virtual void AssignAllLogChannels(LoggingFileHandle_t loggingFileHandle); virtual void UnassignAllLogChannels(); private: int GetUnusedFileInfo() const; struct FileInfo_t { FileHandle_t m_FileHandle; bool IsOpen() const { return m_FileHandle != 0; } void Reset() { m_FileHandle = 0; } }; FileInfo_t m_OpenFiles[MAX_SIMULTANEOUS_LOGGING_FILE_COUNT]; int m_FileIndices[MAX_LOGGING_CHANNEL_COUNT]; }; #endif