map/das-dn/third_party/AdsLib/AmsRouter.h

48 lines
1.5 KiB
C
Raw Normal View History

2024-12-03 10:36:06 +08:00
// SPDX-License-Identifier: MIT
/**
Copyright (c) 2015 - 2022 Beckhoff Automation GmbH & Co. KG
*/
#pragma once
#include "AmsConnection.h"
#include <unordered_set>
2024-12-09 09:41:04 +08:00
namespace Beckhoff
{
namespace Ads
{
2024-12-03 10:36:06 +08:00
struct AmsRouter : Router {
AmsRouter(AmsNetId netId = AmsNetId {});
uint16_t OpenPort();
long ClosePort(uint16_t port);
2024-12-09 09:41:04 +08:00
long GetAmsAddr(uint16_t port, AmsAddr* pAddr);
void SetAmsNetId(AmsNetId netId);
2024-12-03 10:36:06 +08:00
long GetTimeout(uint16_t port, uint32_t& timeout);
long SetTimeout(uint16_t port, uint32_t timeout);
long AddNotification(AmsRequest& request, uint32_t* pNotification, std::shared_ptr<Notification> notify);
long DelNotification(uint16_t port, const AmsAddr* pAddr, uint32_t hNotification);
[[deprecated]]
2024-12-09 09:41:04 +08:00
long ConnectTarget(AmsNetId ams, const IpV4& ip);
long ConnectTarget(AmsNetId ams, const std::string& host);
void DisconnectTarget(const AmsNetId& ams);
2024-12-03 10:36:06 +08:00
AmsConnection* GetConnection(const AmsNetId& pAddr);
2024-12-09 09:41:04 +08:00
long SendAdsRequest(AmsRequest& request);
2024-12-03 10:36:06 +08:00
private:
2024-12-09 09:41:04 +08:00
AmsNetId localAmsNetId;
2024-12-03 10:36:06 +08:00
std::recursive_mutex mutex;
std::condition_variable_any connection_attempt_events;
std::map<AmsNetId, std::tuple<> > connection_attempts;
std::unordered_set<std::unique_ptr<AmsConnection> > connections;
2024-12-09 09:41:04 +08:00
std::map<AmsNetId, AmsConnection*> connection_mapping;
2024-12-03 10:36:06 +08:00
void AwaitConnectionAttempts(const AmsNetId& ams, std::unique_lock<std::recursive_mutex>& lock);
void DeleteIfLastConnection(const AmsConnection* conn);
std::array<AmsPort, NUM_PORTS_MAX> ports;
};
2024-12-09 09:41:04 +08:00
}
}