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