WSF
WsfCommRouter.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2017 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFCOMMROUTER_HPP
13#define WSFCOMMROUTER_HPP
14
15#include "wsf_export.h"
16
17#include <memory>
18
19#include "UtCallbackHolder.hpp"
20class UtInput;
21class UtInputBlock;
22#include "WsfCommAddress.hpp"
24#include "WsfCommMessage.hpp"
26#include "WsfComponentList.hpp"
27#include "WsfEvent.hpp"
28#include "WsfPlatformPart.hpp"
29class WsfScenario;
30class WsfSimulation;
31
32namespace wsf
33{
34namespace comm
35{
36
37class Comm;
38class Network;
39class NetworkManager;
40
41namespace router
42{
43
45
55{
56public:
60 {
61 public:
62 SendData() = default;
63 virtual ~SendData() = default;
64
65 Comm* GetXmtr() const { return mXmtrPtr; }
66 void SetXmtr(Comm* aXmtrPtr) { mXmtrPtr = aXmtrPtr; }
67 std::vector<Message>& GetMessages() { return mMessages; }
68 bool GetAbortProcessing() const { return mAbortProcessing; }
69 void SetAbortProcessing(bool aAbort) { mAbortProcessing = aAbort; }
70
71 private:
72 Comm* mXmtrPtr{nullptr};
73 std::vector<Message> mMessages{};
74 bool mAbortProcessing{false};
75 };
76
77 struct Gateway;
78 using CommVector = std::vector<Comm*>;
79
81
83 ComponentList& GetComponents() { return mComponents; }
84 const ComponentList& GetComponents() const { return mComponents; }
85
89 bool AddComponent(RouterComponent* aComponentPtr);
90 bool RemoveComponent(RouterComponent* aComponentPtr);
92
114
115 virtual bool Receive(double aSimTime, Comm* aXmtrPtr, Comm* aRcvrPtr, Message& aMessage, bool& aOverrideForward);
116
117 virtual bool Send(double aSimTime, SendData& aData);
119
120 Router(const WsfScenario& aScenario);
121 Router* Clone() const override;
122 Router& operator=(const Router& aRhs) = delete;
123 Router(Router&& aSrc) = delete;
124 Router& operator=(Router&& aRhs) = delete;
125
126 ~Router() override = default;
127
129
130 WsfComponent* CloneComponent() const override { return Clone(); }
131 void* QueryInterface(int aRole) override;
132 const int* GetComponentRoles() const override;
133 WsfStringId GetComponentName() const override { return GetNameId(); }
136
138
139 bool PreInitialize(double aSimTime) override;
140 bool Initialize(double aSimTime) override;
141 bool Initialize2(double aSimTime) override;
142 void PreInput() override;
143 virtual void Setup();
144 virtual void PendingStart();
145 bool ProcessInput(UtInput& aInput) override;
146 virtual bool ProcessTypeAddEditDelete(UtInput& aInput);
147 const char* GetScriptClassName() const override;
149
151
152 void PartBroken(double aSimTime) override;
153 void SetNonOperational(double aSimTime) override;
154 void SetOperational(double aSimTime) override;
155 void TurnOff(double aSimTime) override;
156 void TurnOn(double aSimTime) override;
158
159 // Router by default has no update interval
160 // Override these methods to get regular Update() calls
161 void SetUpdateInterval(double aInterval) override {}
162 double GetUpdateInterval() const override { return 0.0; }
163
167
168 virtual void AddInterface(double aSimTime, Comm* aCommPtr);
169 void AddInterface(double aSimTime, const Address& aAddress);
170 virtual void RemoveInterface(double aSimTime, Comm* aCommPtr);
171 void RemoveInterface(double aSimTime, const Address& aAddress);
172 bool HasInterface(Comm* aCommPtr) const;
173 bool HasInterface(const Address& aAddress) const;
174 void ClearInterfaces() { mComms.clear(); }
175 const CommVector& GetInterfaces() const { return mComms; }
177
181 bool IsActive() const;
182
184 virtual void InitializeCallbacks();
185
196
197 virtual bool AddLink(double aSimTime,
198 const Address& aSender,
199 const Address& aDestination,
200 ProtocolInterface& aProtocol,
201 bool aNotifyObserver = true);
202
203 virtual bool RemoveLink(double aSimTime,
204 const Address& aSender,
205 const Address& aDestination,
206 ProtocolInterface& aProtocol,
207 bool aNotifyObserver = true);
208
209 virtual bool AddNode(double aSimTime, const Address& aNodeAddress, ProtocolInterface& aProtocol, bool aNotifyObserver = true);
210
211 virtual bool
212 RemoveNode(double aSimTime, const Address& aNodeAddress, ProtocolInterface& aProtocol, bool aNotifyObserver = true);
213
214 virtual bool EnableLink(double aSimTime,
215 const Address& aSender,
216 const Address& aDestination,
217 ProtocolInterface& aProtocol,
218 bool aNotifyObserver = true);
219
220 virtual bool DisableLink(double aSimTime,
221 const Address& aSender,
222 const Address& aDestination,
223 ProtocolInterface& aProtocol,
224 bool aNotifyObserver = true);
225
226 virtual bool EnableNode(double aSimTime, const Address& aNodeAddress, ProtocolInterface& aProtocol);
227
228 virtual bool DisableNode(double aSimTime, const Address& aNodeAddress, ProtocolInterface& aProtocol);
230
235 const Address& GetGateway() const { return mGateway.mAddress; }
236 void SetGateway(const Address& aAddress);
237 size_t GetHopLimit() const { return mHopLimit; }
238 NetworkManager* GetNetworkManager() const { return mNetworkManager; }
239
240 void SetHopLimit(size_t aHopLimit) { mHopLimit = aHopLimit; }
241
247 struct Gateway
248 {
250 std::string mGatewayCommName;
251
252 Gateway() = default;
253 Gateway(const Gateway& aSrc) = default;
254 };
255
263 virtual bool Broadcast(double aSimTime, SendData& aData);
264
268 std::vector<ProtocolInterface*> GetSortedProtocols() const;
269
270protected:
271 Router(const Router& aSrc);
272
275 virtual bool ValidateGateway();
276
282
283 virtual bool AutomateAddedLinkage(double aSimTime, Comm* aCommPtr);
285
289
290 virtual void PerfectCommAdded(double aSimTime, Comm* aCommPtr);
291 virtual void PerfectCommRemoved(double aSimTime, Comm* aCommPtr);
292 virtual void PerfectNetworkAdded(double aSimTime, Network* aNetworkPtr);
293 virtual void PerfectNetworkRemoved(double aSimTime, Network* aNetworkPtr);
294 virtual void PerfectCommEnabled(double aSimTime, Comm* aCommPtr);
295 virtual void PerfectCommDisabled(double aSimTime, Comm* aCommPtr);
296 virtual void PerfectConnectionAdded(double aSimTime, const Address& aSourceAddress, const Address& aDestinationAddress);
297 virtual void PerfectConnectionRemoved(double aSimTime, const Address& aSourceAddress, const Address& aDestinationAddress);
298 virtual void PerfectConnectionEnabled(double aSimTime, const Address& aSourceAddress, const Address& aDestinationAddress);
299 virtual void PerfectConnectionDisabled(double aSimTime, const Address& aSourceAddress, const Address& aDestinationAddress);
301
302private:
303 NetworkManager* mNetworkManager;
304
308 Gateway mGateway;
309
314 size_t mHopLimit;
315
320 ComponentList mComponents;
321
322 const WsfScenario& mScenario;
323 UtCallbackHolder mCallbacks;
324
326 CommVector mComms;
327
332 bool mAutomatedInterfaceLinking;
333
335 bool mUseLegacyProtocol;
336
338 bool mUseMulticastProtocol;
339
346};
347
348} // namespace router
349} // namespace comm
350} // namespace wsf
351
353WSF_DECLARE_COMPONENT_ROLE_TYPE(wsf::comm::medium::ContainerComponent<wsf::comm::router::Router>,
355
356#endif
@ cWSF_INITIALIZE_ORDER_ROUTER
Definition WsfComponentRoles.hpp:175
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_COMM_ROUTER
A 'router' component (WsfCommRouter).
Definition WsfComponentRoles.hpp:103
@ cWSF_COMPONENT_COMM_MEDIUM_CONTAINER_ROUTER
Definition WsfComponentRoles.hpp:130
wsf::comm::router::Router Router
Definition WsfScriptCommRouterClass.cpp:27
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
A component list that stores only components of a specified type.
Definition WsfComponentList.hpp:343
Definition WsfComponent.hpp:39
WsfStringId GetNameId() const
Definition WsfObject.hpp:66
WsfPlatformPart(const WsfScenario &aScenario, int aPartType)
Definition WsfPlatformPart.cpp:62
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfCommAddress.hpp:57
Definition WsfComm.hpp:43
Definition WsfCommMessage.hpp:51
Definition WsfCommNetworkManager.hpp:44
Definition WsfCommNetwork.hpp:51
Definition WsfCommRouterProtocolInterface.hpp:33
Definition WsfCommRouterComponent.hpp:38
Definition WsfCommRouter.hpp:60
void SetXmtr(Comm *aXmtrPtr)
Definition WsfCommRouter.hpp:66
std::vector< Message > & GetMessages()
Definition WsfCommRouter.hpp:67
Comm * GetXmtr() const
Definition WsfCommRouter.hpp:65
bool GetAbortProcessing() const
Definition WsfCommRouter.hpp:68
void SetAbortProcessing(bool aAbort)
Definition WsfCommRouter.hpp:69
Definition WsfCommRouter.hpp:55
Router(Router &&aSrc)=delete
Router * Clone() const override
Definition WsfCommRouter.cpp:94
virtual void PerfectConnectionDisabled(double aSimTime, const Address &aSourceAddress, const Address &aDestinationAddress)
Definition WsfCommRouter.cpp:1154
double GetUpdateInterval() const override
Definition WsfCommRouter.hpp:162
WsfComponent * CloneComponent() const override
Definition WsfCommRouter.hpp:130
Router & operator=(Router &&aRhs)=delete
Router(const WsfScenario &aScenario)
Definition WsfCommRouter.cpp:45
virtual void PerfectConnectionEnabled(double aSimTime, const Address &aSourceAddress, const Address &aDestinationAddress)
Definition WsfCommRouter.cpp:1135
virtual void PerfectCommRemoved(double aSimTime, Comm *aCommPtr)
Definition WsfCommRouter.cpp:1004
virtual bool ValidateGateway()
Definition WsfCommRouter.cpp:1322
virtual void PerfectCommDisabled(double aSimTime, Comm *aCommPtr)
Definition WsfCommRouter.cpp:1078
int GetComponentInitializationOrder() const override
Definition WsfCommRouter.hpp:134
size_t GetHopLimit() const
Definition WsfCommRouter.hpp:237
NetworkManager * GetNetworkManager() const
Definition WsfCommRouter.hpp:238
const Address & GetGateway() const
Definition WsfCommRouter.hpp:235
const CommVector & GetInterfaces() const
Definition WsfCommRouter.hpp:175
virtual void PerfectConnectionAdded(double aSimTime, const Address &aSourceAddress, const Address &aDestinationAddress)
Definition WsfCommRouter.cpp:1097
std::vector< ProtocolInterface * > GetSortedProtocols() const
Definition WsfCommRouter.cpp:819
WsfComponentListT< WsfComponentT< Router > > ComponentList
Definition WsfCommRouter.hpp:82
virtual void PerfectCommAdded(double aSimTime, Comm *aCommPtr)
Definition WsfCommRouter.cpp:985
virtual void PerfectNetworkAdded(double aSimTime, Network *aNetworkPtr)
Definition WsfCommRouter.cpp:1023
Router & operator=(const Router &aRhs)=delete
ComponentList & GetComponents()
Definition WsfCommRouter.hpp:83
virtual void PerfectConnectionRemoved(double aSimTime, const Address &aSourceAddress, const Address &aDestinationAddress)
Definition WsfCommRouter.cpp:1116
const ComponentList & GetComponents() const
Definition WsfCommRouter.hpp:84
virtual bool AutomateAddedLinkage(double aSimTime, Comm *aCommPtr)
Definition WsfCommRouter.cpp:1287
virtual void PerfectCommEnabled(double aSimTime, Comm *aCommPtr)
Definition WsfCommRouter.cpp:1059
std::vector< Comm * > CommVector
Definition WsfCommRouter.hpp:78
virtual void PerfectNetworkRemoved(double aSimTime, Network *aNetworkPtr)
Definition WsfCommRouter.cpp:1041
void SetHopLimit(size_t aHopLimit)
Definition WsfCommRouter.hpp:240
void SetUpdateInterval(double aInterval) override
Definition WsfCommRouter.hpp:161
~Router() override=default
void ClearInterfaces()
Definition WsfCommRouter.hpp:174
WsfStringId GetComponentName() const override
Definition WsfCommRouter.hpp:133
virtual bool Broadcast(double aSimTime, SendData &aData)
Definition WsfCommRouter.cpp:740
Definition WsfComm.hpp:36
Definition WsfComm.cpp:34
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Definition WsfCommRouter.hpp:248
std::string mGatewayCommName
Definition WsfCommRouter.hpp:250
Address mAddress
Definition WsfCommRouter.hpp:249
Gateway(const Gateway &aSrc)=default
Copyrights Multiple, All Rights Reserved