AdsLib
Loading...
Searching...
No Matches
AmsRouter.h
1// SPDX-License-Identifier: MIT
6#pragma once
7
8#include "AmsConnection.h"
9#include <unordered_set>
10
11struct AmsRouter : Router {
12 AmsRouter(AmsNetId netId = AmsNetId {});
13
14 uint16_t OpenPort();
15 long ClosePort(uint16_t port);
16 long GetLocalAddress(uint16_t port, AmsAddr* pAddr);
17 void SetLocalAddress(AmsNetId netId);
18 long GetTimeout(uint16_t port, uint32_t& timeout);
19 long SetTimeout(uint16_t port, uint32_t timeout);
20 long AddNotification(AmsRequest& request, uint32_t* pNotification, std::shared_ptr<Notification> notify);
21 long DelNotification(uint16_t port, const AmsAddr* pAddr, uint32_t hNotification);
22
23 [[deprecated]]
24 long AddRoute(AmsNetId ams, const IpV4& ip);
25 long AddRoute(AmsNetId ams, const std::string& host);
26 void DelRoute(const AmsNetId& ams);
27 AmsConnection* GetConnection(const AmsNetId& pAddr);
28 long AdsRequest(AmsRequest& request);
29
30private:
31 AmsNetId localAddr;
32 std::recursive_mutex mutex;
33 std::unordered_set<std::unique_ptr<AmsConnection> > connections;
34 std::map<AmsNetId, AmsConnection*> mapping;
35
36 void DeleteIfLastConnection(const AmsConnection* conn);
37
38 std::array<AmsPort, NUM_PORTS_MAX> ports;
39};
The complete address of an ADS device can be stored in this structure.
Definition: AdsDef.h:237
Definition: AmsConnection.h:70
The NetId of and ADS device can be represented in this structure.
Definition: AdsDef.h:224
Definition: AmsConnection.h:20
Definition: AmsRouter.h:11
long AddRoute(AmsNetId ams, const IpV4 &ip)
Definition: AmsRouter.cpp:15
Definition: Sockets.h:26
Definition: Router.h:10