ImagingTools Core SDK
CMessagesController.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QDebug>
7#include <QtCore/QQueue>
8#include <QtCore/QTimer>
9
10// ACF includes
11#include <iser/IVersionInfo.h>
12#include <ifile/IFileNameParam.h>
13#include <ilog/IMessageContainer.h>
14#include <ilog/TLoggerCompWrap.h>
15#include <ilog/TMessageDelegatorComp.h>
16
17// ImtCore includes
18#include <imtbase/ITimeRangeProvider.h>
19#include <imtfile/IFileCompression.h>
20#include <imtlog/IEventProvider.h>
21#include <imtlog/CEventContainer.h>
22#include <imtlog/CMessagesReader.h>
23#include <imtlog/CMessagesReadJobController.h>
24#include <imtlog/CWorkerBase.h>
25
26
27
28namespace imtlog
29{
30
31
32class CMessagesController:
33 public QObject,
34 virtual public ilog::CLoggerBase,
35 virtual public ilog::IMessageConsumer,
36 virtual public imtbase::ITimeRangeProvider
37{
38 Q_OBJECT
39public:
40 typedef ilog::CLoggerBase BaseClass;
41
42 CMessagesController(
43 int id,
44 quint32 maxContainerMessageCount,
45 quint16 containerSavingPeriod,
46 quint16 containerCachingTime,
47 QString dir,
48 QString containerExtension,
49 QString archiveExtension,
50 iser::IVersionInfo* versionInfoPtr,
51 imtfile::IFileCompression* compressorPtr,
52 ilog::IMessageConsumer* logPtr);
53
54 void OnSystemShutdown();
55
56 QByteArray AddJob(
57 const IEventFilter* filterPtr,
58 const IMessageFilterParams* filterParamsPtr) const;
59
60 bool IsJobExists(const QByteArray& jobId) const;
61 bool TakeJobResult(const QByteArray& jobId, CMessagesReader::EventContainerPtr& resultEvents) const;
62
63 // reimplemented (imtbase::ITimeRangeProvider)
64 virtual imtbase::CTimeRange GetTimeRange() const override;
65
66 // reimplemented (ilog::IMessageConsumer)
67 virtual bool IsMessageSupported(
68 int messageCategory = -1,
69 int messageId = -1,
70 const istd::IInformationProvider* messagePtr = NULL) const override;
71 virtual void AddMessage(const MessagePtr& messagePtr) override;
72
73Q_SIGNALS:
74 void InitTimer();
75 void ReadFinished(QByteArray requestId);
76
77private Q_SLOTS:
78 void OnInitTimer();
79 void OnTimer();
80 void OnJobFinished(const QByteArray& jobId);
81
82private:
83 enum ControllerState
84 {
85 CS_INIT = 0,
86 CS_OK,
87 CS_SHUTDOWN,
88 CS_FAILED
89 };
90
91 enum ThreadState
92 {
93 TS_IDLE = 0,
94 TS_RUNNING,
95 TS_PENDING
96 };
97
98 struct QueueItem
99 {
100 quint16 timeout;
101 CMessagesReader::EventContainerPtr containerPtr;
102 };
103
104 class Writer: public CWorkerBase
105 {
106 public:
107 Writer(
108 CMessagesController& parent,
109 QString dir,
110 QString containerExtension,
111 QString archiveExtension,
112 iser::IVersionInfo* versionInfoPtr,
113 imtfile::IFileCompression* compressorPtr);
114
115 private:
116 // reimplemented (QThread)
117 virtual void run() override;
118
119 private:
120 CMessagesController& m_parent;
121 QString m_dir;
122 QString m_containerExtension;
123 QString m_archiveExtension;
124 iser::IVersionInfo* m_versionInfoPtr;
125 imtfile::IFileCompression* m_compressorPtr;
126 };
127
128private:
129 ControllerState m_state;
130
131 int m_maxContainerMessageCount;
132 quint16 m_containerSavingPeriod;
133 quint16 m_containerCachingTime;
134
135 QTimer m_timer;
136 Writer m_writer;
137
138 mutable imtbase::CTimeRange m_archiveTimeRange;
139
140 QList<QueueItem> m_workingQueue;
141 QMutex m_workingQueueMutex;
142
143 CMessagesReader::EventContainerList m_writingQueue;
144 QMutex m_writingQueueMutex;
145
146 QList<QueueItem> m_cache;
147 QMutex m_cacheMutex;
148
149 mutable CMessagesReadJobController m_readJobController;
150 CMessagesReader m_messagesReader;
151 int m_supportedMessageId;
152};
153
154
155} // namespace imtlog
156
157