WSF
WsfCommProtocolMulticast.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 WSFCOMMPROTOCOLMULTICAST_HPP
13#define WSFCOMMPROTOCOLMULTICAST_HPP
14
15#include "wsf_export.h"
16
17#include <unordered_set>
18
19#include "WsfCommAddress.hpp" // for Address
20#include "WsfCommGraph.hpp"
21#include "WsfCommRouter.hpp"
23#include "WsfComponentRoles.hpp" // for WSF_DECLARE_COMPONENT_ROLE_TYPE
24class UtScriptTypes;
25class WsfComponent;
26
27namespace wsf
28{
29namespace comm
30{
31
32class Message;
33
34namespace router
35{
36
49{
50public:
51 static ProtocolMulticast* Find(const Router& aParent);
52 static ProtocolMulticast* FindOrCreate(Router& aParent);
53
54 ProtocolMulticast() = default;
55 ~ProtocolMulticast() override = default;
56
58
59 WsfComponent* CloneComponent() const override;
60 const int* GetComponentRoles() const override;
61 void* QueryInterface(int aRole) override;
62 int GetPriority() const override;
63 ProtocolMulticast* Clone() const override;
64
65 std::vector<Address> Routing(double aSimTime,
66 const Address& aSendingInterface,
67 size_t& aHopNumber,
68 double& aCost,
69 const Message& aMessage) override;
70
71 const char* GetScriptClassName() const override { return "WsfCommProtocolMulticast"; }
73
74 void Setup() override;
75
77
78 bool ShouldPropagateTruth() const override { return false; }
79 graph::Graph* GetGraph() const override { return mGraph; }
81
82 bool Send(double aSimTime, Router::SendData& aData) override;
83
84 bool Receive(double aSimTime, const Address& aReceivingInterface, Message& aMessage, bool& aOverrideForward) override;
85
86 bool Initialize(double aSimTime) override;
87
88protected:
90 struct RouteData
91 {
93 size_t mHops{};
94 double mCost{};
96 std::unordered_set<Address> mDestinationSet{};
97 };
98
102 virtual bool ForwardMessage(double aSimTime, const Address& aReceivingInterface, Message& aMessage);
103
104private:
105 graph::Graph* mGraph{nullptr};
106};
107
110{
111public:
112 ScriptProtocolClassMulticast(const std::string& aClassName, UtScriptTypes* aTypesPtr);
113
114 ~ScriptProtocolClassMulticast() override = default;
115};
116
117} // namespace router
118} // namespace comm
119} // namespace wsf
120
122
123#endif
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_COMM_ROUTER_PROTOCOL_MULTICAST
Definition WsfComponentRoles.hpp:127
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfComponent.hpp:39
Definition WsfCommAddress.hpp:57
Definition WsfCommMessage.hpp:51
Definition WsfCommGraph.hpp:150
Definition WsfCommProtocolMulticast.hpp:49
ProtocolMulticast * Clone() const override
Definition WsfCommProtocolMulticast.cpp:67
void * QueryInterface(int aRole) override
Definition WsfCommProtocolMulticast.cpp:73
static ProtocolMulticast * Find(const Router &aParent)
Definition WsfCommProtocolMulticast.cpp:30
static ProtocolMulticast * FindOrCreate(Router &aParent)
Definition WsfCommProtocolMulticast.cpp:37
graph::Graph * GetGraph() const override
Definition WsfCommProtocolMulticast.hpp:79
int GetPriority() const override
Definition WsfCommProtocolMulticast.cpp:88
bool ShouldPropagateTruth() const override
Definition WsfCommProtocolMulticast.hpp:78
const int * GetComponentRoles() const override
Definition WsfCommProtocolMulticast.cpp:57
const char * GetScriptClassName() const override
Definition WsfCommProtocolMulticast.hpp:71
WsfComponent * CloneComponent() const override
Definition WsfCommProtocolMulticast.cpp:51
std::vector< Address > Routing(double aSimTime, const Address &aSendingInterface, size_t &aHopNumber, double &aCost, const Message &aMessage) override
Definition WsfCommProtocolMulticast.cpp:293
Definition WsfCommRouter.hpp:60
Definition WsfCommRouter.hpp:55
ScriptProtocolClassMulticast(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfCommProtocolMulticast.cpp:401
ScriptRouterProtocolClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfCommRouterProtocolInterface.cpp:22
std::vector< Address > AddressList
Definition WsfCommGraph.hpp:36
Definition WsfComm.hpp:36
Definition WsfComm.cpp:34
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
A simple data structure to hold routing data.
Definition WsfCommProtocolMulticast.hpp:91
double mCost
Definition WsfCommProtocolMulticast.hpp:94
std::unordered_set< Address > mDestinationSet
Definition WsfCommProtocolMulticast.hpp:96
size_t mHops
Definition WsfCommProtocolMulticast.hpp:93
Address mNextHop
Definition WsfCommProtocolMulticast.hpp:92
graph::AddressList mFullPath
Definition WsfCommProtocolMulticast.hpp:95
Copyrights Multiple, All Rights Reserved