WSF
WsfCommProtocolAdHoc.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 2019 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 WSFCOMMPROTOCOLADHOC_HPP
13#define WSFCOMMPROTOCOLADHOC_HPP
14
15#include "wsf_export.h"
16
18#include "WsfRandomVariable.hpp"
19class WsfScenario;
21
22namespace wsf
23{
24namespace comm
25{
26namespace router
27{
28
58{
59public:
60 static ProtocolAdHoc* Find(const Router& aParent);
61 static ProtocolAdHoc* FindOrCreate(Router& aParent);
62
63 ProtocolAdHoc(const WsfScenario& aScenario);
64 ProtocolAdHoc(const ProtocolAdHoc& aSrc);
65 ~ProtocolAdHoc() override = default;
66
68
69 WsfComponent* CloneComponent() const override;
70 const int* GetComponentRoles() const override;
71 void* QueryInterface(int aRole) override;
72 int GetPriority() const override;
73 ProtocolAdHoc* Clone() const override;
74
75 bool Send(double aSimTime, Router::SendData& aData) override;
76
77 std::vector<Address> Routing(double aSimTime,
78 const Address& aSendingInterface,
79 size_t& aHopNumber,
80 double& aCost,
81 const Message& aMessage) override;
82
83 const char* GetScriptClassName() const override { return "WsfCommProtocolAdHoc"; }
85
86 bool Initialize(double aSimTime) override;
87 bool ProcessInput(UtInput& aInput) override;
88 void Setup() override;
89
91
92 bool ShouldPropagateTruth() const override { return false; }
93 graph::Graph* GetGraph() const override { return mGraph.get(); }
95
99
100 void ExecuteOnCommAdded(double aSimTime, const Address& aComm);
101 void ExecuteOnCommRemoved(double aSimTime, const Address& aComm);
102 void ExecuteOnConnectionAdded(double aSimTime, const Address& aSourceAddress, const Address& aDestinationAddress);
103 void ExecuteOnConnectionRemoved(double aSimTime, const Address& aSourceAddress, const Address& aDestinationAddress);
104 Address ExecuteOnMessageRouting(double aSimTime, const Address& aInterface, const Message& aMessage);
106
114
115 void PerfectCommAdded(double aSimTime, Comm* aCommPtr) override;
116 void PerfectCommRemoved(double aSimTime, Comm* aCommPtr) override;
117 void PerfectConnectionAdded(double aSimTime, const Address& aSourceAddress, const Address& aDestinationAddress) override;
118 void PerfectConnectionRemoved(double aSimTime, const Address& aSourceAddress, const Address& aDestinationAddress) override;
120
125 bool ValidNetwork(const Address& aAddress) const;
126
129 void InitializeState();
130
131private:
132 const WsfScenario& mScenario;
133 std::unique_ptr<graph::Graph> mGraph{nullptr};
134 std::unique_ptr<WsfScriptContext> mContextPtr{nullptr};
135
138 WsfRandomVariable mOnConnectionAddedDelay{WsfRandomVariable::cCONSTANT, 0.0, 0.0, WsfRandomVariable::cNON_NEGATIVE};
139 WsfRandomVariable mOnConnectionRemovedDelay{WsfRandomVariable::cCONSTANT, 0.0, 0.0, WsfRandomVariable::cNON_NEGATIVE};
140
141 UtScript* mOnCommAdded{nullptr};
142 UtScript* mOnCommRemoved{nullptr};
143 UtScript* mOnConnectionAdded{nullptr};
144 UtScript* mOnConnectionRemoved{nullptr};
145 UtScript* mOnMessageRouting{nullptr};
146
147 std::shared_ptr<int> mEvents{std::make_shared<int>(0)};
148};
149
150} // namespace router
151} // namespace comm
152} // namespace wsf
153
155
156#endif
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_COMM_ROUTER_PROTOCOL_AD_HOC
Definition WsfComponentRoles.hpp:128
Definition WsfComponent.hpp:39
Definition WsfRandomVariable.hpp:33
@ cCONSTANT
The random values will always have a constant value.
Definition WsfRandomVariable.hpp:38
@ cNON_NEGATIVE
Value must be greater than or equal to zero.
Definition WsfRandomVariable.hpp:50
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
Definition WsfCommMessage.hpp:51
Definition WsfCommGraph.hpp:150
Definition WsfCommProtocolAdHoc.hpp:58
void PerfectCommRemoved(double aSimTime, Comm *aCommPtr) override
Definition WsfCommProtocolAdHoc.cpp:502
const char * GetScriptClassName() const override
Definition WsfCommProtocolAdHoc.hpp:83
static ProtocolAdHoc * FindOrCreate(Router &aParent)
Definition WsfCommProtocolAdHoc.cpp:37
void Setup() override
Definition WsfCommProtocolAdHoc.cpp:140
bool ProcessInput(UtInput &aInput) override
Definition WsfCommProtocolAdHoc.cpp:146
int GetPriority() const override
Definition WsfCommProtocolAdHoc.cpp:116
void ExecuteOnConnectionRemoved(double aSimTime, const Address &aSourceAddress, const Address &aDestinationAddress)
Definition WsfCommProtocolAdHoc.cpp:422
Address ExecuteOnMessageRouting(double aSimTime, const Address &aInterface, const Message &aMessage)
Definition WsfCommProtocolAdHoc.cpp:457
void PerfectConnectionRemoved(double aSimTime, const Address &aSourceAddress, const Address &aDestinationAddress) override
Definition WsfCommProtocolAdHoc.cpp:553
void InitializeState()
Definition WsfCommProtocolAdHoc.cpp:594
~ProtocolAdHoc() override=default
WsfComponent * CloneComponent() const override
Definition WsfCommProtocolAdHoc.cpp:79
bool ValidNetwork(const Address &aAddress) const
Definition WsfCommProtocolAdHoc.cpp:578
bool Send(double aSimTime, Router::SendData &aData) override
Definition WsfCommProtocolAdHoc.cpp:226
std::vector< Address > Routing(double aSimTime, const Address &aSendingInterface, size_t &aHopNumber, double &aCost, const Message &aMessage) override
Definition WsfCommProtocolAdHoc.cpp:255
void ExecuteOnConnectionAdded(double aSimTime, const Address &aSourceAddress, const Address &aDestinationAddress)
Definition WsfCommProtocolAdHoc.cpp:387
void PerfectConnectionAdded(double aSimTime, const Address &aSourceAddress, const Address &aDestinationAddress) override
Definition WsfCommProtocolAdHoc.cpp:528
void ExecuteOnCommAdded(double aSimTime, const Address &aComm)
Definition WsfCommProtocolAdHoc.cpp:322
void PerfectCommAdded(double aSimTime, Comm *aCommPtr) override
Definition WsfCommProtocolAdHoc.cpp:476
const int * GetComponentRoles() const override
Definition WsfCommProtocolAdHoc.cpp:85
ProtocolAdHoc * Clone() const override
Definition WsfCommProtocolAdHoc.cpp:95
bool ShouldPropagateTruth() const override
Definition WsfCommProtocolAdHoc.hpp:92
ProtocolAdHoc(const WsfScenario &aScenario)
Definition WsfCommProtocolAdHoc.cpp:51
void * QueryInterface(int aRole) override
Definition WsfCommProtocolAdHoc.cpp:101
bool Initialize(double aSimTime) override
Definition WsfCommProtocolAdHoc.cpp:122
void ExecuteOnCommRemoved(double aSimTime, const Address &aComm)
Definition WsfCommProtocolAdHoc.cpp:351
graph::Graph * GetGraph() const override
Definition WsfCommProtocolAdHoc.hpp:93
static ProtocolAdHoc * Find(const Router &aParent)
Definition WsfCommProtocolAdHoc.cpp:30
Definition WsfCommRouter.hpp:60
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
Copyrights Multiple, All Rights Reserved