AsyncFw 1.2
Async Framework is c++ runtime with timers, poll notifiers, sockets, coroutines, etc.
 
Loading...
Searching...
No Matches
DataArraySocket.h
1/*
2Copyright (c) 2026 Alexandr Kuzmuk
3
4This file is part of the AsyncFw project. Licensed under the MIT License.
5See {Link: LICENSE file https://mit-license.org} in the project root for full license information.
6*/
7
8#pragma once
9
10#include <deque>
11#include "../core/AbstractTlsSocket.h"
12#include "../core/FunctionConnector.h"
13
14namespace AsyncFw {
15class TlsContext;
17class DataArraySocket : public AbstractTlsSocket {
18 friend class DataArrayAbstractTcp;
19 friend class DataArrayTcpClient;
20 friend class RrdClient;
21 friend LogStream &operator<<(LogStream &, const DataArraySocket &);
22
23public:
24 DataArraySocket();
25 ~DataArraySocket() override;
26
27 bool initTls(const TlsContext &data);
28 void disableTls();
29
30 bool transmit(const DataArray &, uint32_t, bool = false) const;
31 void clearBuffer(const DataArray *) const;
32 int connectTimeout() const { return waitForConnectTimeoutInterval; }
33 void setConnectTimeout(int timeout) { waitForConnectTimeoutInterval = timeout; }
34 int reconnectTimeout() const { return reconnectTimeoutInterval; }
35 void setReconnectTimeout(int timeout) { reconnectTimeoutInterval = timeout; }
36 void setReadTimeout(int timeout) { readTimeoutInterval = timeout; }
37 void setWaitForEncryptedTimeout(int timeout) { waitForEncryptedTimeoutInterval = timeout; }
38 void setWaitKeepAliveAnswerTimeout(int timeout) { ((waitKeepAliveAnswerTimeoutInterval = timeout) > 0) ? waitTimerType |= 0x80 : waitTimerType &= ~0x80; }
39 void setReadBuffers(int buffers, int size) {
40 maxReadBuffers = buffers;
41 maxReadSize = size;
42 }
43 void setWriteBuffers(int buffers, int size) {
44 maxWriteBuffers = buffers;
45 maxWriteSize = size;
46 }
47 void initServerConnection();
48 void setHost(const std::string &address, uint16_t port) const {
49 hostAddress_v = address;
50 hostPort_v = port;
51 }
52 const std::string hostAddress() const { return hostAddress_v; }
53 uint16_t hostPort() const { return hostPort_v; }
54 void transmitKeepAlive() { transmitKeepAlive(true); }
55 AbstractSocket::State state() const { return state_; }
56
57 bool connect(const std::string &, uint16_t) override;
58 void disconnect() override;
59
60 mutable FunctionConnectorProtected<DataArraySocket>::Connector<AbstractSocket::State> stateChanged {AbstractFunctionConnector::DirectOnly};
61 mutable FunctionConnectorProtected<DataArraySocket>::Connector<const DataArray *, uint32_t> received {AbstractFunctionConnector::DirectOnly};
62
63protected:
64 void stateEvent() override;
65 void readEvent() override;
66 using AbstractTlsSocket::connect;
67
68private:
69 int sslConnection;
70 DataArray *receiveByteArray;
71 uint8_t waitTimerType;
72 int maxReadBuffers;
73 int maxReadSize;
74 int maxWriteBuffers;
75 int maxWriteSize;
76 int waitForConnectTimeoutInterval;
77 int reconnectTimeoutInterval;
78 int readTimeoutInterval;
79 int waitForEncryptedTimeoutInterval;
80 int waitKeepAliveAnswerTimeoutInterval;
81 int timerId;
82 uint32_t readSize;
83 uint32_t readId;
84 mutable bool waitForTransmit;
85 mutable std::vector<DataArray *> receiveList;
86 mutable std::string address;
87 mutable uint16_t port;
88 mutable std::string hostAddress_v;
89 mutable uint16_t hostPort_v;
90 mutable std::deque<DataArray> transmitList;
91 bool connectToHost();
92 bool connectToHost(int timeout);
93 void clearBuffer_(const DataArray *) const;
94 void writeSocket();
95 void transmitKeepAlive(bool);
96 std::string peerString() const;
97 void startTimer(int _ms);
98 void removeTimer();
99 void timerEvent();
100 int tid_ = -1;
101 AsyncFw::AbstractThread::Holder *wait_holder_ = nullptr;
102};
103} // namespace AsyncFw
The Holder class.
Definition AbstractThread.h:61
The DataArray class.
Definition DataArray.h:20
The LogStream class.
Definition LogStream.h:44
The TlsContext class provides functionality for managing TLS certificates.
Definition TlsContext.h:24