WSF
WsfComm.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 2016 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 WSFCOMM_HPP
13#define WSFCOMM_HPP
14
15#include "wsf_export.h"
16
17class UtInput;
19#include "WsfCommAddress.hpp"
20#include "WsfCommComponent.hpp"
24#include "WsfComponentList.hpp"
25#include "WsfStringId.hpp"
26
27namespace wsf
28{
29namespace comm
30{
31
32class Message;
34
35namespace router
36{
37class Router;
38}
39
43{
44 friend class Event;
45
46public:
49 using LinkAddress = std::vector<wsf::comm::Address>;
50 using LinkPair = std::vector<std::pair<std::string, std::string>>;
51
58
64 enum class MulticastConformanceLevel : size_t
65 {
66 cLEVEL_0, // no support for multicasting
67 cLEVEL_1, // only supports sending of multicast, receive disabled
68 cLEVEL_2 // full multicast support
69 };
70
75 struct Gateway
76 {
78 std::string mPlatformName;
79 std::string mCommName;
80 };
81
82 Comm(const WsfScenario& aScenario, CommType aCommType = cCT_XMT_RCV);
83 ~Comm() override = default;
84 Comm& operator=(const Comm& aRhs) = delete;
85
88
90 ComponentList& GetComponents() { return mComponents; }
91 const ComponentList& GetComponents() const { return mComponents; }
93
95
96 WsfComponent* CloneComponent() const override { return Clone(); }
97 const int* GetComponentRoles() const override;
98 void* QueryInterface(int aRole) override;
101
103
104 const char* GetScriptClassName() const override;
105 Comm* Clone() const override;
106 bool PreInitialize(double aSimTime) override;
107 bool Initialize(double aSimTime) override;
108 bool Initialize2(double aSimTime) override;
109 void PreInput() override;
110 bool ProcessInput(UtInput& aInput) override;
111 void Update(double aSimTime) override;
112 virtual void Setup();
113 virtual void PendingStart();
115
117
118 void PartBroken(double aSimTime) override;
119 void SetNonOperational(double aSimTime) override;
120 void SetOperational(double aSimTime) override;
121 void TurnOff(double aSimTime) override;
122 void TurnOn(double aSimTime) override;
124
127
128 virtual void AddLinkAddress(const Address& aAddress) { mLinkAddresses.push_back(aAddress); }
129 virtual void AddLink(const std::string& aPlatformName, const std::string& aCommName)
130 {
131 mLinks.emplace_back(aPlatformName, aCommName);
132 }
133
134
136
137 const Address& GetGateway() const { return mGateway.mAddress; }
138 const std::string& GetGatewayRemotePlatform() const { return mGateway.mPlatformName; }
139 const std::string& GetGatewayRemoteComm() const { return mGateway.mCommName; }
140 void SetGateway(const Address& aAddress);
142
152 virtual bool CanSendTo(double aSimTime, Comm* aRcvrPtr, Message* aMessagePtr = nullptr);
153
161
162 virtual bool Receive(double aSimTime, Comm* aXmtrPtr, Message& aMessage);
163 virtual bool Send(double aSimTime, std::unique_ptr<WsfMessage> aMessagePtr, const Address& aAddress);
166 WSF_DEPRECATED
167 virtual bool Send(double aSimTime, const WsfMessage& aMessage, const Address& aAddress) final;
169
171
172 virtual bool ProcessLayerMessage(double aSimTime, size_t aLayerIndex, layer::Message aLayerMessage, Message* aCommMessagePtr);
174
176 CommType GetCommType() const { return mCommTrueType; }
177
180 WsfStringId GetClassId() const { return mClassId; }
181
184 const Address& GetAddress() const { return mAddress; }
185
187 const Address& GetInputAddress() const { return mInputAddress; }
188
191 const std::string& GetNetwork() const { return mNetwork; }
192
195 size_t GetNumChannels() const { return mNumChannels; }
196
198 const std::string& GetInputNetwork() const { return mInputNetwork; }
199
202
204 const LinkAddress& GetLinkAddresses() const { return mLinkAddresses; }
205
207 const LinkPair& GetLinkPairs() const { return mLinks; }
208
211 void SetAddress(const Address& aAddress) { mAddress = aAddress; }
212 void SetNetwork(const std::string& aNetwork) { mNetwork = aNetwork; }
213
215 virtual std::string GetFullName() const;
216
220 virtual bool CanReceive() const { return mReceiveEnabled; }
221 virtual bool CanSend() const { return mTransmitEnabled; }
222
225 void SetReceiveEnabled(bool aIsEnabled) { mReceiveEnabled = aIsEnabled; }
226 void SetTransmitEnabled(bool aIsEnabled) { mTransmitEnabled = aIsEnabled; }
227
233
234 router::Router* GetRouter() const { return mRouterPtr; }
235 void SetRouter(router::Router* aRouterPtr);
236 const std::string& GetRouterName() const { return mRouterName; }
237 void SetRouterName(const std::string& aRouterName) { mRouterName = aRouterName; }
239
243 std::vector<ProtocolInterface*> GetSortedProtocols() const;
244
246
247 MulticastConformanceLevel GetMulticastLevel() const { return mMulticastLevel; }
248
253 virtual void SetMulticastLevel();
255
257
261
263
264
274
275 virtual bool SendSetup(double aSimTime, Message& aMessage, const Address& aAddress);
276
277 virtual bool ReceiveSetup(double aSimTime, Comm* aXmtrPtr, Message& aMessage);
279
284
285 virtual bool SendActions(double aSimTime, bool aSendStatus, Message& aMessage);
286
287 virtual bool ReceiveActions(double aSimTime, bool aReceiveStatus, Comm* aXmtrPtr, Message& aMessage);
288
289protected:
291 virtual void PrintDebugReception(double aSimTime, const Message& aMessage) const;
292
293 // Copy constructor
294 Comm(const Comm& aSrc);
295
296 // Comm by default has no update interval
297 // Override these methods to get regular Update() calls
298 void SetUpdateInterval(double aInterval) override {}
299 double GetUpdateInterval() const override { return 0.0; }
300
303 void SetClassId(WsfStringId aClassId) { mClassId = aClassId; }
304
306 virtual bool ValidateGateway();
307
310
315
316
318
320 std::string mInputNetwork;
321
325
331
332
333private:
336 CommType mCommTrueType;
337
338 // Comm device's current ability to transmit or receive.
339 // Initialized to the truth type but can be changed later
340 // to reflect the current state of the device.
341 bool mReceiveEnabled; // 'true' if receive enabled
342 bool mTransmitEnabled; // 'true' if transmit enabled
343
345 ComponentList mComponents;
346
350
351
352 Address mAddress;
353
355 std::string mNetwork;
357
358 WsfStringId mClassId;
359
361
362
364 LinkAddress mLinkAddresses;
365
367 LinkPair mLinks;
368
373
374
376 std::string mRouterName;
377
379 router::Router* mRouterPtr;
381
383 Gateway mGateway;
384
388 MulticastConformanceLevel mMulticastLevel;
389};
390
391} // namespace comm
392} // namespace wsf
393
394UT_MAP_CLASS_TO_SCRIPT_NAME(wsf::comm::Comm, "WsfComm")
395
397WSF_DECLARE_COMPONENT_ROLE_TYPE(wsf::comm::medium::ContainerComponent<wsf::comm::Comm>,
399
400#endif
@ cWSF_INITIALIZE_ORDER_COMM
Definition WsfComponentRoles.hpp:176
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_COMM
A 'comm' component (WsfComm).
Definition WsfComponentRoles.hpp:102
@ cWSF_COMPONENT_COMM_MEDIUM_CONTAINER_COMM
Definition WsfComponentRoles.hpp:129
wsf::comm::Comm Comm
Definition WsfScriptCommRouterClass.cpp:28
aObjectPtr Update(simTime)
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
WsfArticulatedPart(const WsfScenario &aScenario, int aPartType)
Definition WsfArticulatedPart.cpp:29
A component list that stores only components of a specified type.
Definition WsfComponentList.hpp:343
Definition WsfComponent.hpp:39
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfCommAddress.hpp:57
Definition WsfComm.hpp:43
const Address & GetInputAddress() const
Returns the user indicated interface address.
Definition WsfComm.hpp:187
const Address & GetInputNetworkAddress() const
Returns the user indicated network membership in address format.
Definition WsfComm.hpp:201
void SetUpdateInterval(double aInterval) override
Definition WsfComm.hpp:298
bool Initialize2(double aSimTime) override
Definition WsfComm.cpp:196
void PartBroken(double aSimTime) override
Definition WsfComm.cpp:343
const LinkAddress & GetLinkAddresses() const
Returns the user suppled interface linkage in address format.
Definition WsfComm.hpp:204
const ProtocolStack & GetProtocolStack() const
Definition WsfComm.hpp:259
WsfComponent * CloneComponent() const override
Definition WsfComm.hpp:96
bool PreInitialize(double aSimTime) override
Definition WsfComm.cpp:150
ProtocolStack mProtocolStack
Protocol stack used by this comm device.
Definition WsfComm.hpp:309
bool ProcessInput(UtInput &aInput) override
Definition WsfComm.cpp:222
Comm * Clone() const override
Standard Clone() method.
Definition WsfComm.cpp:143
void SetTransmitEnabled(bool aIsEnabled)
Definition WsfComm.hpp:226
const std::string & GetRouterName() const
Definition WsfComm.hpp:236
const std::string & GetNetwork() const
Definition WsfComm.hpp:191
Comm(const WsfScenario &aScenario, CommType aCommType=cCT_XMT_RCV)
Definition WsfComm.cpp:37
CommType GetCommType() const
Returns the comm device's true type as was intended on construction.
Definition WsfComm.hpp:176
const char * GetScriptClassName() const override
void SetRouterName(const std::string &aRouterName)
Definition WsfComm.hpp:237
friend class Event
Definition WsfComm.hpp:44
void SetNetwork(const std::string &aNetwork)
Definition WsfComm.hpp:212
const std::string & GetGatewayRemotePlatform() const
Definition WsfComm.hpp:138
virtual void AddLinkAddress(const Address &aAddress)
Definition WsfComm.hpp:128
const LinkPair & GetLinkPairs() const
Returns the user supplied interface linkage in platform/comm name format.
Definition WsfComm.hpp:207
size_t mNumChannels
Definition WsfComm.hpp:330
bool Initialize(double aSimTime) override
Definition WsfComm.cpp:168
virtual void PendingStart()
Definition WsfComm.cpp:585
ComponentList & GetComponents()
Definition WsfComm.hpp:90
const Address & GetGateway() const
Definition WsfComm.hpp:137
virtual void AddLink(const std::string &aPlatformName, const std::string &aCommName)
Definition WsfComm.hpp:129
std::vector< std::pair< std::string, std::string > > LinkPair
Definition WsfComm.hpp:50
void SetAddress(const Address &aAddress)
Definition WsfComm.hpp:211
WsfComponentListT< WsfComponentT< Comm > > ComponentList
Definition WsfComm.hpp:89
const std::string & GetGatewayRemoteComm() const
Definition WsfComm.hpp:139
Comm & operator=(const Comm &aRhs)=delete
void TurnOff(double aSimTime) override
Definition WsfComm.cpp:377
CommType
Definition WsfComm.hpp:53
@ cCT_XMT_RCV
Transmit and receive.
Definition WsfComm.hpp:56
@ cCT_RCV_ONLY
Receive only.
Definition WsfComm.hpp:55
@ cCT_XMT_ONLY
Transmit only.
Definition WsfComm.hpp:54
ProtocolStack & GetProtocolStack()
Accessor/mutator for protocol stack.
Definition WsfComm.hpp:258
std::vector< wsf::comm::Address > LinkAddress
Definition WsfComm.hpp:49
MulticastConformanceLevel
Definition WsfComm.hpp:65
virtual bool CanReceive() const
Definition WsfComm.hpp:220
const ComponentList & GetComponents() const
Definition WsfComm.hpp:91
int GetComponentInitializationOrder() const override
Definition WsfComm.hpp:99
const Address & GetAddress() const
Definition WsfComm.hpp:184
void TurnOn(double aSimTime) override
Definition WsfComm.cpp:397
void SetReceiveEnabled(bool aIsEnabled)
Definition WsfComm.hpp:225
double GetUpdateInterval() const override
Definition WsfComm.hpp:299
std::string mInputNetwork
A user supplied network, for indicating which network this interface should join.
Definition WsfComm.hpp:320
size_t GetNumChannels() const
Definition WsfComm.hpp:195
void SetNonOperational(double aSimTime) override
Definition WsfComm.cpp:354
virtual bool CanSend() const
Definition WsfComm.hpp:221
void SetOperational(double aSimTime) override
Definition WsfComm.cpp:365
void PreInput() override
Definition WsfComm.cpp:215
Address mInputNetworkAddress
A user supplied network address, for indicating which network this interface should join.
Definition WsfComm.hpp:323
Address mInputAddress
A user supplied address indicated for use with this interface. May be null if not specified.
Definition WsfComm.hpp:317
WsfStringId GetClassId() const
Definition WsfComm.hpp:180
virtual void Setup()
Definition WsfComm.cpp:559
~Comm() override=default
MulticastConformanceLevel GetMulticastLevel() const
Definition WsfComm.hpp:247
router::Router * GetRouter() const
Definition WsfComm.hpp:234
void SetClassId(WsfStringId aClassId)
Definition WsfComm.hpp:303
const std::string & GetInputNetwork() const
Returns the user indicated network membership.
Definition WsfComm.hpp:198
Definition WsfCommMessage.hpp:51
Definition WsfCommProtocolInterface.hpp:37
This class represents a communication devices protocol stack.
Definition WsfCommProtocolStack.hpp:37
Definition WsfCommLayerMessage.hpp:36
Definition WsfCommRouter.hpp:55
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 WsfComm.hpp:76
std::string mCommName
Definition WsfComm.hpp:79
Address mAddress
Definition WsfComm.hpp:77
std::string mPlatformName
Definition WsfComm.hpp:78
Copyrights Multiple, All Rights Reserved