ImagingTools Core SDK
CMessagesReadJobController.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/QThread>
7
8// ACF includes
9#include <ilog/IMessageConsumer.h>
10#include <ilog/CMessageContainer.h>
11
12// ImtCore includes
13#include <imtfile/IFileCompression.h>
14#include <imtlog/IEventProvider.h>
15#include <imtlog/CMessagesReader.h>
16#include <imtlog/CMessageFilterParams.h>
17
18
19namespace imtlog
20{
21
22
23class CMessagesReadJobController: public QThread
24{
25 Q_OBJECT
26public:
27 typedef QThread BaseClass;
28
29 enum JobStatus
30 {
31 JS_NONE,
32 JS_WAITING,
33 JS_RUNNING,
34 JS_FINISHED
35 };
36
37 struct Job
38 {
39 Job()
40 :status(JS_NONE),
41 filterPtr(nullptr)
42 {
43 }
44
45 JobStatus status;
46 QByteArray uuid;
47 const IEventFilter* filterPtr;
48 CMessageFilterParams filterParams;
49 CMessagesReader::EventContainerPtr containerPtr;
50 };
51
52 typedef QList<Job> JobList;
53
54 explicit CMessagesReadJobController(
55 const QString& dir,
56 const QString& containerExtension,
57 const QString& archiveExtension,
58 iser::IVersionInfo* versionInfoPtr,
59 imtfile::IFileCompression* compressorPtr,
60 ilog::IMessageConsumer* logPtr);
61
62 QByteArray AddJob(const IEventFilter* filterPtr, const IMessageFilterParams* filterParamsPtr);
63
64 bool IsJobExists(const QByteArray& jobId) const;
65 bool TakeJobResult(const QByteArray& jobId, CMessagesReader::EventContainerPtr& resultEvents);
66
67Q_SIGNALS:
68 void JobFinished(QByteArray jobId);
69
70protected:
71 // reimplemented (QThread)
72 virtual void run() override;
73
74private:
75 void ProcessJob(Job& job);
76
77private:
78 JobList m_jobList;
79 mutable QMutex m_jobMutex;
80
81 const QString m_dir;
82 const QString m_containerExtension;
83 const QString m_archiveExtension;
84 const iser::IVersionInfo* m_versionInfoPtr;
85 const imtfile::IFileCompression* m_compressorPtr;
86
87 ilog::IMessageConsumer* m_logPtr;
88};
89
90
91} // namespace imtlog
92
93