14#include <condition_variable>
17using Timepoint = std::chrono::steady_clock::time_point;
18#define WAITING_FOR_RESPONSE ((uint32_t)0xFFFFFFFF)
25 uint32_t bufferLength;
33 uint32_t __bufferLength = 0,
34 void* __buffer =
nullptr,
35 uint32_t* __bytesRead =
nullptr,
36 size_t payloadLength = 0)
41 bufferLength(__bufferLength),
43 bytesRead(__bytesRead)
46 void SetDeadline(uint32_t tmms)
48 deadline = std::chrono::steady_clock::now();
49 deadline += std::chrono::milliseconds(tmms);
54 std::atomic<AmsRequest*> request;
55 std::atomic<uint32_t> invokeId;
58 void Notify(uint32_t error);
66 std::condition_variable cv;
74 SharedDispatcher CreateNotifyMapping(uint32_t hNotify, std::shared_ptr<Notification> notification);
75 long DeleteNotification(
const AmsAddr& amsAddr, uint32_t hNotify, uint32_t tmms, uint16_t port);
76 long AdsRequest(
AmsRequest& request, uint32_t timeout);
84 bool IsConnectedTo(
const struct addrinfo* targetAddresses)
const;
91 std::atomic<size_t> refCount;
92 std::atomic<uint32_t> invokeId;
93 std::array<AmsResponse, Router::NUM_PORTS_MAX> queue;
95 template<
class T>
void ReceiveFrame(
AmsResponse* response,
size_t length, uint32_t aoeError)
const;
96 bool ReceiveNotification(
const AoEHeader& header);
97 void ReceiveJunk(
size_t bytesToRead)
const;
98 void Receive(
void* buffer,
size_t bytesToRead, timeval* timeout =
nullptr)
const;
99 void Receive(
void* buffer,
size_t bytesToRead,
const Timepoint& deadline)
const;
100 template<
class T>
void Receive(T& buffer)
const { Receive(&buffer,
sizeof(T)); }
104 uint32_t GetInvokeId();
106 AmsResponse* GetPending(uint32_t
id, uint16_t port);
108 std::map<VirtualConnection, SharedDispatcher> dispatcherList;
109 std::recursive_mutex dispatcherListMutex;
110 SharedDispatcher DispatcherListAdd(
const VirtualConnection& connection);
111 SharedDispatcher DispatcherListGet(
const VirtualConnection& connection);
114 const uint32_t ownIp;
The complete address of an ADS device can be stored in this structure.
Definition: AdsDef.h:237
Definition: AmsConnection.h:70
bool IsConnectedTo(const struct addrinfo *targetAddresses) const
Definition: AmsConnection.cpp:100
Definition: AmsConnection.h:20
Definition: AmsConnection.h:53
AmsResponse()
Definition: AmsConnection.cpp:9
Definition: AmsRouter.h:11