WSF
WsfCommMessage.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 WSFCOMMMESSAGE_HPP
13#define WSFCOMMMESSAGE_HPP
14
15#include "wsf_export.h"
16
17#include <memory>
18#include <vector>
19
20#include "UtCloneablePtr.hpp"
21#include "UtScriptClassDefine.hpp"
22#include "WsfAuxDataEnabled.hpp"
23#include "WsfCommAddress.hpp"
24#include "WsfCommResult.hpp"
25#include "WsfMessage.hpp"
27
28namespace wsf
29{
30namespace comm
31{
32
35{
36public:
37 virtual ~MessageHeader() = default;
38 virtual MessageHeader* Clone() const = 0;
39};
40
43{
44public:
45 virtual ~MessageTrailer() = default;
46 virtual MessageTrailer* Clone() const = 0;
47};
48
50class WSF_EXPORT Message : public UtScriptAccessible, public WsfAuxDataEnabled
51{
52public:
53 Message(std::unique_ptr<WsfMessage> aMessagePtr);
54 WSF_DEPRECATED Message(const WsfMessage& aMessage);
55 virtual ~Message();
56 Message(const Message& aSrc);
57 Message(Message&&) = default;
58 Message& operator=(const Message& aRhs);
59 Message& operator=(Message&&) = default;
60 const char* GetScriptClassName() const override { return "WsfCommMessage"; }
61
62 virtual Message* Clone() const;
63
64 ut::CloneablePtr<WsfMessage>& SourceMessage() { return mSrcMessagePtr; }
65 const ut::CloneablePtr<WsfMessage>& SourceMessage() const { return mSrcMessagePtr; }
66 virtual void SetSourceMessage(std::unique_ptr<WsfMessage> aMessagePtr);
67
68 MessageHeader* PopHeader();
69 void PushHeader(MessageHeader* aHeader);
70
71 MessageTrailer* PopTrailer();
72 void PushTrailer(MessageTrailer* aTrailer);
73
74 std::vector<Address>& GetTraceRoute() { return mTraceRoute; }
75 const std::vector<Address>& GetTraceRoute() const { return mTraceRoute; }
76
78 unsigned int& GetTransportFeatures() { return mTransportFeature; }
79
80 size_t GetTTL() const { return mTTL; }
81 virtual void SetTTL(size_t aTTL) { mTTL = aTTL; }
82
83 Result& GetResult() { return mCommResult; }
84
95 {
96 public:
97 Identifier() = default;
98 Identifier(const Message& aMessage);
99 Identifier(const WsfMessage& aMessage); // No source address via WsfMessage - use SetSource()
100 virtual ~Identifier() = default;
101
102 void SetSerialNumber(unsigned int aSerialNumber) { mSerialNumber = aSerialNumber; }
103 void SetSource(const Address& aAddress) { mSource = aAddress; }
104 void SetDestination(const Address& aAddress) { mDestination = aAddress; }
105 unsigned int GetSerialNumber() const { return mSerialNumber; }
106 const Address& GetSource() const { return mSource; }
107 const Address& GetDestination() const { return mDestination; }
108
109 bool operator==(const Identifier& aRhs) const;
110 bool operator!=(const Identifier& aRhs) const;
111
112 private:
113 unsigned int mSerialNumber{};
114 Address mSource{};
115 Address mDestination{};
116 };
117
118private:
119 ut::CloneablePtr<WsfMessage> mSrcMessagePtr;
120
121 // size of sent message - headers + message + trailers
122 // ability to split up source message into multiple packets but still reference the same source message
123
124 std::vector<MessageHeader*> mHeaders;
125 std::vector<MessageTrailer*> mTrailers;
126
129 std::vector<wsf::comm::Address> mTraceRoute;
130
136 unsigned int mTransportFeature;
137
142 size_t mTTL;
143
146 Result mCommResult;
147};
148
149class WSF_EXPORT ScriptMessageClass : public UtScriptClass
150{
151public:
152 ScriptMessageClass(const std::string& aClassName, UtScriptTypes* aTypesPtr);
153
156 UT_DECLARE_SCRIPT_METHOD(GetSourceMessage);
157
159};
160
161} // namespace comm
162} // namespace wsf
163
165namespace std
166{
167template<>
168struct hash<wsf::comm::Message::Identifier>
169{
171 {
172 return (aId.GetSerialNumber() * hash<wsf::comm::Address>{}(aId.GetDestination())) ^
173 hash<wsf::comm::Address>{}(aId.GetSource());
174 }
175};
176
177} // namespace std
178#endif
wsf::comm::Address Address
Definition WsfScriptCommRouterClass.cpp:29
bool operator!=(int aId, const WsfStringInt &aRhs)
Not equal relational operator for the case of an integer on the LHS and a StringId on the RHS.
Definition WsfStringId.hpp:75
bool operator==(int aId, const WsfStringInt &aRhs)
Equal relational operator for the case of an integer on the LHS and a StringId on the RHS.
Definition WsfStringId.hpp:69
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
WsfAuxDataEnabled()=default
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Definition WsfCommAddress.hpp:57
Definition WsfCommMessage.hpp:35
virtual ~MessageHeader()=default
virtual MessageHeader * Clone() const =0
Definition WsfCommMessage.hpp:43
virtual MessageTrailer * Clone() const =0
virtual ~MessageTrailer()=default
Definition WsfCommMessage.hpp:95
void SetDestination(const Address &aAddress)
Definition WsfCommMessage.hpp:104
void SetSource(const Address &aAddress)
Definition WsfCommMessage.hpp:103
const Address & GetSource() const
Definition WsfCommMessage.hpp:106
unsigned int GetSerialNumber() const
Definition WsfCommMessage.hpp:105
const Address & GetDestination() const
Definition WsfCommMessage.hpp:107
virtual ~Identifier()=default
void SetSerialNumber(unsigned int aSerialNumber)
Definition WsfCommMessage.hpp:102
Definition WsfCommMessage.hpp:51
const ut::CloneablePtr< WsfMessage > & SourceMessage() const
Definition WsfCommMessage.hpp:65
unsigned int & GetTransportFeatures()
Return by reference accessor/mutator.
Definition WsfCommMessage.hpp:78
Message & operator=(const Message &aRhs)
Definition WsfCommMessage.cpp:155
std::vector< Address > & GetTraceRoute()
Definition WsfCommMessage.hpp:74
virtual void SetTTL(size_t aTTL)
Definition WsfCommMessage.hpp:81
Message(Message &&)=default
Result & GetResult()
Definition WsfCommMessage.hpp:83
const char * GetScriptClassName() const override
Definition WsfCommMessage.hpp:60
size_t GetTTL() const
Definition WsfCommMessage.hpp:80
Message & operator=(Message &&)=default
Message(std::unique_ptr< WsfMessage > aMessagePtr)
Definition WsfCommMessage.cpp:61
const std::vector< Address > & GetTraceRoute() const
Definition WsfCommMessage.hpp:75
ut::CloneablePtr< WsfMessage > & SourceMessage()
Definition WsfCommMessage.hpp:64
Definition WsfCommResult.hpp:34
UT_DECLARE_SCRIPT_METHOD(GetSourceMessage)
UT_DECLARE_SCRIPT_METHOD(GetTraceRoute)
ScriptMessageClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfCommMessage.cpp:181
Template specialization for wsf::comm::Address. Allows usage of Address in std::unordered_map/set.
Definition WsfCommAddress.hpp:185
Definition WsfComm.cpp:34
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
size_t operator()(const wsf::comm::Message::Identifier &aId) const
Definition WsfCommMessage.hpp:170
Copyrights Multiple, All Rights Reserved