cc_tools_qt
Common Environment for Protocol Analysis.
Loading...
Searching...
No Matches
ToolsMsgMgrImpl.h
1//
2// Copyright 2014 - 2025 (C). Alex Robenko. All rights reserved.
3//
4
5// This file is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18#pragma once
19
20#include "cc_tools_qt/ToolsMsgMgr.h"
21
22#include <QtCore/QObject>
23
24#include <vector>
25
26namespace cc_tools_qt
27{
28
29class ToolsMsgMgrImpl : public QObject
30{
31 Q_OBJECT
32public:
33 using MsgType = ToolsMsgMgr::MsgType;
34
35 ToolsMsgMgrImpl();
36 ~ToolsMsgMgrImpl() noexcept;
37
38 void start();
39 void stop();
40 void clear();
41
42 ToolsSocketPtr getSocket() const;
43 ToolsProtocolPtr getProtocol() const;
44 void setRecvEnabled(bool enabled);
45
46 void deleteMsg(ToolsMessagePtr msg);
47 void deleteMsgs(const ToolsMessagesList& msgs);
48 void deleteAllMsgs()
49 {
50 m_allMsgs.clear();
51 }
52
53 void sendMsgs(ToolsMessagesList&& msgs);
54
55 const ToolsMessagesList& getAllMsgs() const
56 {
57 return m_allMsgs;
58 }
59
60 void addMsgs(const ToolsMessagesList& msgs, bool reportAdded);
61
62 void setSocket(ToolsSocketPtr socket);
63 void setProtocol(ToolsProtocolPtr protocol);
64 void addFilter(ToolsFilterPtr filter);
65
66 using MsgAddedCallbackFunc = ToolsMsgMgr::MsgAddedCallbackFunc;
67 using ErrorReportCallbackFunc = ToolsMsgMgr::ErrorReportCallbackFunc;
68 using SocketConnectionStatusReportCallbackFunc = ToolsMsgMgr::SocketConnectionStatusReportCallbackFunc;
69
70 template <typename TFunc>
71 void setMsgAddedCallbackFunc(TFunc&& func)
72 {
73 m_msgAddedCallback = std::forward<TFunc>(func);
74 }
75
76 template <typename TFunc>
77 void setErrorReportCallbackFunc(TFunc&& func)
78 {
79 m_errorReportCallback = std::forward<TFunc>(func);
80 }
81
82 template <typename TFunc>
83 void setSocketConnectionStatusReportCallbackFunc(TFunc&& func)
84 {
85 m_socketConnectionStatusReportCallback = std::forward<TFunc>(func);
86 }
87
88private slots:
89 void socketErrorReport(const QString& msg);
90 void socketConnectionReport(bool connected);
91 void socketDataReceived(ToolsDataInfoPtr dataInfoPtr);
92 void filterErrorReport(const QString& msg);
93 void filterDataToSendReport(ToolsDataInfoPtr dataInfoPtr);
94 void protocolErrorReport(const QString& msg);
95 void protocolSendMessageReport(ToolsMessagePtr msg);
96
97private:
98 using MsgNumberType = unsigned long long;
99 using FiltersList = std::vector<ToolsFilterPtr>;
100
101 void updateInternalId(ToolsMessage& msg);
102 void reportMsgAdded(ToolsMessagePtr msg);
103 void reportError(const QString& error);
104 void reportSocketConnectionStatus(bool connected);
105
106 ToolsMessagesList m_allMsgs;
107 bool m_recvEnabled = false;
108
109 ToolsSocketPtr m_socket;
110 ToolsProtocolPtr m_protocol;
111 FiltersList m_filters;
112 MsgNumberType m_nextMsgNum = 1;
113 bool m_running = false;
114
115 MsgAddedCallbackFunc m_msgAddedCallback;
116 ErrorReportCallbackFunc m_errorReportCallback;
117 SocketConnectionStatusReportCallbackFunc m_socketConnectionStatusReportCallback;
118};
119
120} // namespace cc_tools_qt
Main namespace for all classes / functions of the shared library.
std::shared_ptr< ToolsDataInfo > ToolsDataInfoPtr
Pointer to ToolsDataInfo.
Definition ToolsDataInfo.h:57
std::shared_ptr< ToolsFilter > ToolsFilterPtr
Pointer to ToolsFilter object.
Definition ToolsFilter.h:179
std::shared_ptr< ToolsProtocol > ToolsProtocolPtr
Pointer to ToolsProtocol object.
Definition ToolsProtocol.h:233
std::shared_ptr< ToolsSocket > ToolsSocketPtr
Pointer to ToolsSocket object.
Definition ToolsSocket.h:217
std::shared_ptr< ToolsMessage > ToolsMessagePtr
Smart pointer to ToolsMessage.
Definition ToolsMessage.h:163