WSF
WsfCommProtocolIGMP.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 2018 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 WSFCOMMPROTOCOLIGMP_HPP
13#define WSFCOMMPROTOCOLIGMP_HPP
14
15#include "wsf_export.h"
16
17#include <unordered_set>
18
19#include "UtScriptBasicTypes.hpp"
20#include "WsfCommAddress.hpp"
21#include "WsfCommGraph.hpp"
23#include "WsfEvent.hpp"
24#include "WsfRandomVariable.hpp"
25
26namespace wsf
27{
28namespace comm
29{
30
52{
53public:
54 static ProtocolIGMP* Find(const Comm& aParent);
55 static ProtocolIGMP* FindOrCreate(Comm& aParent);
56
57 ProtocolIGMP() = default;
58 ~ProtocolIGMP() override = default;
59
61
62 WsfComponent* CloneComponent() const override;
63 const int* GetComponentRoles() const override;
64 void* QueryInterface(int aRole) override;
65 ProtocolPriority GetPriority() const override;
66 ProtocolIGMP* Clone() const override;
67 void Setup() override;
68 const char* GetScriptClassName() const override { return "WsfCommProtocolIGMP"; }
70
71 bool Initialize(double aSimTime) override;
72 bool ProcessInput(UtInput& aInput) override;
73
82
83 Address GetQuerier() const;
84 virtual void LeaveGroup(double aSimTime, const Address& aAddress);
85 virtual void JoinGroup(double aSimTime, const Address& aAddress);
87
90
91 ProcessResult NetworkSend(double aSimTime, size_t aLayerIndex, Message& aMessage) override;
92 ProcessResult NetworkReceive(double aSimTime, size_t aLayerIndex, Message& aMessage) override;
93 ProcessResult PhysicalReceive(double aSimTime, size_t aLayerIndex, Message& aMessage) override;
95
96 std::vector<Address> GetGroups() const { return mJoinGroups; }
97
98protected:
101 {
103 size_t mHops;
104 double mCost;
106 std::unordered_set<Address> mDestinationSet;
107 };
108
110
115
116 void JoinGroup(const Address& aAddress) { mJoinGroups.push_back(aAddress); }
117 void LeaveGroup(const Address& aAddress);
119
120private:
121 std::vector<Address> mJoinGroups{};
122
127
132};
133
136{
137public:
138 enum class EventType : size_t
139 {
140 cJOIN,
141 cLEAVE
142 };
143
144 IGMP_SubscriptionEvent(double aSimTime,
145 EventType aEventType,
146 const Address& aCommAddress,
147 const Address& aMulticastGroupAddress);
148
149 ~IGMP_SubscriptionEvent() override = default;
150
151 EventDisposition Execute() override;
152
153private:
154 EventType mEventType;
155 Address mCommAddress;
156 Address mMulticastAddress;
157};
158
161{
162public:
163 ScriptProtocolClassIGMP(const std::string& aClassName, UtScriptTypes* aTypesPtr);
164
165 ~ScriptProtocolClassIGMP() override = default;
166
167 UT_DECLARE_SCRIPT_METHOD(JoinMulticastGroup);
168 UT_DECLARE_SCRIPT_METHOD(LeaveMulticastGroup);
169};
170
171} // namespace comm
172} // namespace wsf
173
175
176#endif
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_COMM_PROTOCOL_IGMP
Definition WsfComponentRoles.hpp:122
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfComponent.hpp:39
WsfEvent()=default
EventDisposition
Definition WsfEvent.hpp:37
Definition WsfRandomVariable.hpp:33
@ cNON_NEGATIVE
Value must be greater than or equal to zero.
Definition WsfRandomVariable.hpp:50
Definition WsfCommAddress.hpp:57
Definition WsfComm.hpp:43
An event class for handling join/leave multicast delays.
Definition WsfCommProtocolIGMP.hpp:136
IGMP_SubscriptionEvent(double aSimTime, EventType aEventType, const Address &aCommAddress, const Address &aMulticastGroupAddress)
Definition WsfCommProtocolIGMP.cpp:431
EventDisposition Execute() override
Definition WsfCommProtocolIGMP.cpp:443
EventType
Definition WsfCommProtocolIGMP.hpp:139
~IGMP_SubscriptionEvent() override=default
Definition WsfCommMessage.hpp:51
Definition WsfCommProtocolIGMP.hpp:52
static ProtocolIGMP * Find(const Comm &aParent)
Definition WsfCommProtocolIGMP.cpp:34
static ProtocolIGMP * FindOrCreate(Comm &aParent)
Definition WsfCommProtocolIGMP.cpp:41
const char * GetScriptClassName() const override
Definition WsfCommProtocolIGMP.hpp:68
void Setup() override
Definition WsfCommProtocolIGMP.cpp:125
ProtocolIGMP * Clone() const override
Definition WsfCommProtocolIGMP.cpp:71
~ProtocolIGMP() override=default
std::vector< Address > GetGroups() const
Definition WsfCommProtocolIGMP.hpp:96
Address GetMessageAddressFromAux(Message &aMessage)
Definition WsfCommProtocolIGMP.cpp:413
const int * GetComponentRoles() const override
Definition WsfCommProtocolIGMP.cpp:60
void JoinGroup(const Address &aAddress)
Definition WsfCommProtocolIGMP.hpp:116
WsfComponent * CloneComponent() const override
Definition WsfCommProtocolIGMP.cpp:54
ProtocolPriority GetPriority() const override
Definition WsfCommProtocolIGMP.cpp:96
void * QueryInterface(int aRole) override
Definition WsfCommProtocolIGMP.cpp:77
~ScriptProtocolClassIGMP() override=default
UT_DECLARE_SCRIPT_METHOD(JoinMulticastGroup)
UT_DECLARE_SCRIPT_METHOD(LeaveMulticastGroup)
ScriptProtocolClassIGMP(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfCommProtocolIGMP.cpp:461
ScriptProtocolClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfCommProtocolInterface.cpp:20
std::vector< Address > AddressList
Definition WsfCommGraph.hpp:36
Definition WsfComm.cpp:34
ProtocolPriority
Definition WsfCommProtocolPriority.hpp:25
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 WsfCommProtocolIGMP.hpp:101
graph::AddressList mFullPath
Definition WsfCommProtocolIGMP.hpp:105
double mCost
Definition WsfCommProtocolIGMP.hpp:104
size_t mHops
Definition WsfCommProtocolIGMP.hpp:103
std::unordered_set< Address > mDestinationSet
Definition WsfCommProtocolIGMP.hpp:106
Address mNextHop
Definition WsfCommProtocolIGMP.hpp:102
Copyrights Multiple, All Rights Reserved