12#ifndef WSFCOMMNETWORKMANAGER_HPP
13#define WSFCOMMNETWORKMANAGER_HPP
15#include "wsf_export.h"
20#include <unordered_map>
21#include <unordered_set>
24#include "UtCallback.hpp"
25#include "UtCallbackHolder.hpp"
26#include "UtMemory.hpp"
57 size_t operator()(
Comm* aCommPtr)
const noexcept {
return std::hash<unsigned int>()(aCommPtr->GetUniqueId()); }
61 using CommMap = std::unordered_map<Address, Comm*>;
62 using AddressMap = std::unordered_map<Comm*, Address, CommHash>;
66 using NetworkMap = std::unordered_map<std::string, std::unique_ptr<Network>>;
177 Address AddComm(
double aSimTime,
Comm* aCommPtr, std::string& aNetworkName,
bool aNotifyObserver =
true);
179 std::string AddComm(
double aSimTime,
Comm* aCommPtr,
const Address& aAddress,
bool aNotifyObserver =
true);
186 void RemoveComm(
double aSimTIme,
Comm* aCommPtr,
bool aNotifyObserver =
true);
187 void RemoveComm(
double aSimTime,
const Address& aAddress,
bool aNotifyObserver =
true);
195 bool AddNetwork(
double aSimTime, std::unique_ptr<Network> aNetwork,
bool aSuppressReservedCheck =
false);
203 void RemoveNetwork(
double aSimTime,
const std::string& aNetworkName);
208 bool EnableComm(
double aSimTime,
Comm* aCommPtr);
209 bool EnableComm(
double aSimTime,
const Address& aAddress);
215 bool DisableComm(
double aSimTime,
Comm* aCommPtr);
216 bool DisableComm(
double aSimTime,
const Address& aAddress);
222 bool AddConnection(
double aSimTime,
Comm* aSourceCommPtr,
Comm* aDestinationCommPtr,
bool aNotifyObserver =
true);
223 bool AddConnection(
double aSimTime,
225 const Address& aDestinationAddress,
226 bool aNotifyObserver =
true);
232 bool RemoveConnection(
double aSimTime,
Comm* aSourceCommPtr,
Comm* aDestinationCommPtr,
bool aNotifyObserver =
true);
233 bool RemoveConnection(
double aSimTime,
235 const Address& aDestinationAddress,
236 bool aNotifyObserver =
true);
242 bool EnableConnection(
double aSimTime,
Comm* aSourceCommPtr,
Comm* aDestinationCommPtr,
bool aNotifyObserver =
true);
243 bool EnableConnection(
double aSimTime,
245 const Address& aDestinationAddress,
246 bool aNotifyObserver =
true);
252 bool DisableConnection(
double aSimTime,
Comm* aSourceCommPtr,
Comm* aDestinaationCommPtr,
bool aNotifyObserver =
true);
253 bool DisableConnection(
double aSimTime,
255 const Address& aDestinationAddress,
256 bool aNotifyObserver =
true);
258 bool AddMulticastMember(
double aSimTime,
const Address& aMulticastAddress,
const Address& aJoiningMember);
260 bool RemoveMulticastMember(
double aSimTime,
const Address& aMulticastAddress,
const Address& aLeavingMember);
265 bool RemoveNetworkConnections(
double aSimTime,
const std::string& aNetworkName,
bool aNotifyObserver =
true);
271 void ManageComm(
double aSimTime,
273 const std::string& aNetworkName,
275 const Address& aNetworkAddress);
282 void InitializeUserLinks(
double aSimTime,
Comm* aCommPtr);
295 void PlatformDeleted(
double aSimTime,
WsfPlatform* aPlatform);
296 void PlatformInitialized(
double aSimTime,
WsfPlatform* aPlatform);
336 CommMap mAddressToCommMap;
337 AddressMap mCommToAddressMap;
340 AddressNetworkMap mAddressToNetworkMap;
343 NetworkMap mNetworkMap;
346 NetworkSet mNetworkAddressSet;
359 UtCallbackHolder mCallbacks;
369 MultiAddressMap mMulticastMap;
376 RouterVector mRouters;
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
const std::string & GetExtensionName() const
Definition WsfExtension.hpp:31
WsfScenarioExtension()
Definition WsfScenarioExtension.cpp:21
WsfSimulationExtension()
Definition WsfSimulationExtension.cpp:23
friend class WsfSimulation
Definition WsfSimulationExtension.hpp:43
The main controller for a simulation.
Definition WsfSimulation.hpp:109
void RegisterExtension(const std::string &aName, std::unique_ptr< WsfSimulationExtension > aExtensionPtr)
Definition WsfSimulation.cpp:1554
Definition WsfCommAddress.hpp:57
Definition WsfComm.hpp:43
Definition WsfCommNetworkManager.hpp:380
void SimulationCreated(WsfSimulation &aSimulation) override
Definition WsfCommNetworkManager.hpp:382
std::unordered_map< Address, Comm * > CommMap
Definitions of commonly used container types.
Definition WsfCommNetworkManager.hpp:61
AddressSet GetAddressesInNetwork(const std::string &aNetworkName) const
Get a list of all addresses associated with a network.
Definition WsfCommNetworkManager.cpp:694
bool IsMulticastManaged(const Address &aMulticastAddress) const
True if a multicast address being utilized/managed.
Definition WsfCommNetworkManager.cpp:1616
UtCallbackListN< void(double, const Address &, const Address &)> ConnectionEnabled
Definition WsfCommNetworkManager.hpp:318
UtCallbackListN< void(double, const Address &, const Address &)> ConnectionAdded
Definition WsfCommNetworkManager.hpp:316
UtCallbackListN< void(double, const Address &, const Address &)> ConnectionRemoved
Definition WsfCommNetworkManager.hpp:317
Network * GetNetwork(const std::string &aNetworkName) const
Provides Network object for a network name.
Definition WsfCommNetworkManager.cpp:572
UtCallbackListN< void(double, Network *)> NetworkRemoved
Definition WsfCommNetworkManager.hpp:313
std::vector< std::string > GetManagedNetworks() const
Returns the names of all managed networks.
Definition WsfCommNetworkManager.cpp:615
NetworkManager(const NetworkManager &aSrc)=delete
NetworkManager(NetworkManager &&aSrc)=delete
Comm * GetComm(const Address &aAddress) const
Provides Comm object for an Address.
Definition WsfCommNetworkManager.cpp:561
AddressSet GetComms() const
Returns all registered comms in the simulation.
Definition WsfCommNetworkManager.cpp:1623
~NetworkManager() override=default
void PendingStart() override
Definition WsfCommNetworkManager.cpp:360
UtCallbackListN< void(double, WsfPlatform *)> CommFrameworkPlatformInitialized
Filtered PlatformInitialized event, called after the comm framework has processed this platform.
Definition WsfCommNetworkManager.hpp:325
std::unordered_map< Comm *, Address, CommHash > AddressMap
Definition WsfCommNetworkManager.hpp:62
bool Initialize() override
Definition WsfCommNetworkManager.cpp:57
std::unordered_map< Address, AddressVector > MultiAddressMap
Definition WsfCommNetworkManager.hpp:68
bool IsNetworkManaged(const std::string &aNetworkName) const
True if network with name provided present.
Definition WsfCommNetworkManager.cpp:605
NetworkTopology
Definition WsfCommNetworkManager.hpp:47
UtCallbackListN< void()> CommFrameworkPendingStart
Allows indication that the comm framework is fully set up.
Definition WsfCommNetworkManager.hpp:322
UtCallbackListN< void(double, Network *)> NetworkAdded
Definition WsfCommNetworkManager.hpp:312
graph::Graph & GetGraph()
Get the graph representation of all comm networks in AFSIM (perfect knowledge).
Definition WsfCommNetworkManager.cpp:717
bool IsAddressManaged(const Address &aAddress) const
True if Address object present.
Definition WsfCommNetworkManager.cpp:594
NetworkManager & operator=(const NetworkManager &aSrc)=delete
bool PlatformsInitialized() override
Definition WsfCommNetworkManager.cpp:87
UtCallbackListN< void(double, Comm *)> CommRemoved
Definition WsfCommNetworkManager.hpp:311
std::vector< Comm * > CommVector
Definition WsfCommNetworkManager.hpp:69
void AddManagedRouter(router::Router *aRouterPtr)
Definition WsfCommNetworkManager.hpp:160
std::vector< Address > AddressVector
Definition WsfCommNetworkManager.hpp:67
std::unordered_map< Address, std::string > AddressNetworkMap
Definition WsfCommNetworkManager.hpp:65
void AddManagedComm(Comm *aCommPtr)
Definition WsfCommNetworkManager.hpp:154
UtCallbackListN< void(double, const Address &, const Address &)> ConnectionDisabled
Definition WsfCommNetworkManager.hpp:319
const Address * GetManagingNetworkAddress(const Address &aAddress) const
Returns the address of the network that the provided address belongs to.
Definition WsfCommNetworkManager.cpp:637
std::string GetNetworkNameFromAddress(const Address &aAddress) const
Get name of network associated with an Address.
Definition WsfCommNetworkManager.cpp:683
bool HasMulticastMember(const Address &aMulticastAddress, const std::string &aNetworkName) const
Returns true if the network has a comm subscribed to the provided multicast address.
Definition WsfCommNetworkManager.cpp:1493
UtCallbackListN< void(double, WsfPlatform *)> CommFrameworkPlatformDeleted
Filtered PlatformDeleted event, called prior to the comm framework removing this platform.
Definition WsfCommNetworkManager.hpp:328
std::vector< router::Router * > RouterVector
Definition WsfCommNetworkManager.hpp:70
std::unordered_set< Address > AddressSet
Definition WsfCommNetworkManager.hpp:63
UtCallbackListN< void(double, Comm *)> CommAdded
Definition WsfCommNetworkManager.hpp:310
const ReservedAddressing & GetReservedAddresses() const
Accessor for reserved addressing object.
Definition WsfCommNetworkManager.hpp:300
std::unordered_map< std::string, std::unique_ptr< Network > > NetworkMap
Definition WsfCommNetworkManager.hpp:66
WsfSimulation * GetSimulation() const
Definition WsfCommNetworkManager.hpp:291
AddressSet GetMulticastMembers(const Address &aMulticastAddress, const std::string &aNetworkName) const
Returns the members of a network subscribed to a multicast address.
Definition WsfCommNetworkManager.cpp:1573
const Address * GetAddress(Comm *aCommPtr) const
Accessors.
Definition WsfCommNetworkManager.cpp:550
NetworkManager & operator=(NetworkManager &&aSrc)=delete
bool PathExists(const Address &aSourceAddress, const Address &aDestinationAddress) const
Simple check of pathing from source to destination.
Definition WsfCommNetworkManager.cpp:1635
UtCallbackListN< void(double, Comm *)> CommDisabled
Definition WsfCommNetworkManager.hpp:315
bool IsCommManaged(Comm *aCommPtr) const
True if Comm object present.
Definition WsfCommNetworkManager.cpp:583
UtCallbackListN< void(double, Comm *)> CommEnabled
Definition WsfCommNetworkManager.hpp:314
std::set< Address > NetworkSet
Definition WsfCommNetworkManager.hpp:64
static NetworkManager * Find(const WsfSimulation &aSimulation)
Definition WsfCommNetworkManager.cpp:34
bool IsNetworkAddressManaged(const Address &aAddress) const
True if network address provided overlaps with a currently assigned network address.
Definition WsfCommNetworkManager.cpp:627
NetworkManager(WsfSimulation *aSimPtr)
Constructors and Operator Overloads.
Definition WsfCommNetworkManager.cpp:40
Definition WsfCommNetwork.hpp:51
Definition WsfCommReservedAddressing.hpp:109
Definition WsfCommGraph.hpp:150
Definition WsfCommRouter.hpp:55
Definition WsfComm.cpp:34
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Definition WsfCommNetworkManager.hpp:56
size_t operator()(Comm *aCommPtr) const noexcept
Definition WsfCommNetworkManager.hpp:57