WSF
WsfMessageProcessor.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 2003-2015 The Boeing 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 WSFMESSAGEPROCESSOR_HPP
13#define WSFMESSAGEPROCESSOR_HPP
14
15#include "wsf_export.h"
16
17#include <string>
18
19#include "WsfExternalLinks.hpp"
20#include "WsfInternalLinks.hpp"
21#include "WsfRandomVariable.hpp"
22#include "WsfTimeDelayQueue.hpp"
23#include "WsfVariable.hpp"
25
27
29{
30public:
33 ~WsfMessageProcessor() override;
34
36
37 WsfProcessor* Clone() const override;
38
39 bool Initialize(double aSimTime) override;
40
41 bool ProcessInput(UtInput& aInput) override;
42
43 bool ProcessMessage(double aSimTime, const WsfMessage& aMessage) override;
44
45 bool ReceiveMessage(double aSimTime, const WsfMessage& aMessage) override;
46
47 void SendMessage(double aSimTime, const WsfMessage& aMessage) override;
48
49 void TurnOff(double aSimTime) override;
50
51 void TurnOn(double aSimTime) override;
52
53 void Update(double aSimTime) override;
55
56 bool ProcessAction(double aSimTime, const WsfMessage& aMessage);
57 class Action
58 {
59 public:
60 friend class WsfMessageProcessor;
61
62 Action(bool aIsDefaultAction);
63
64 bool Initialize(double aSimTime, WsfMessageProcessor* aProcessorPtr);
65
66 bool ProcessInput(UtInput& aInput, WsfMessageProcessor* aProcessorPtr, const std::string& aNamespace, bool aAllowScript);
67
71 UtScript* mScriptPtr;
73
74 // NOTE: The external and internal links contained in this object are NOT used if the instance
75 // is the action for the 'default_process'. Instead, the code will use the external links
76 // defined in WsfScriptProcessor and the internal links from WsfPlatformPart, so as to
77 // allow external run-time modification to work as expected.
78
81 };
82
83 friend class Action;
84
86 {
87 public:
88 enum
89 {
91 cPEER = 2,
94 };
95
96 Selector();
97
98 bool Initialize(double aSimTime, WsfMessageProcessor* aProcessorPtr);
99
100 bool ProcessInput(UtInput& aInput, WsfMessageProcessor* aProcessorPtr, const std::string& aNamespace, int aSelectorIndex);
101
102 bool Matches(double aSimTime, const WsfMessage& aMessage, WsfMessageProcessor* aProcessorPtr) const;
103
104 UtScript* mScriptPtr;
113 };
114
115 friend class Selector;
116
118 {
119 public:
120 Process();
121
122 bool Initialize(double aSimTime, WsfMessageProcessor* aProcessorPtr);
123
124 bool ProcessInput(UtInput& aInput, WsfMessageProcessor* aProcessorPtr, const std::string& aNamespace);
125
126 std::list<Selector> mSelectorList;
128 };
129
130 friend class Process;
131
134 {
135 public:
136 DelayRequest(WsfMessageProcessor* aProcessorPtr, const WsfMessage& aMessage, Action* aActionPtr, double aDelayTime);
137
138 ~DelayRequest() override;
139
140 // Needed for priority queuing
141 bool operator<(const DelayRequest& aRhs) const { return mPriority < aRhs.mPriority; }
142
143 bool CompleteRequest(double aSimTime) override;
144
148
150 };
151
152 friend class DelayRequest;
153
154protected:
156
157private:
158 Action* FindAction(double aSimTime, const WsfMessage& aMessage);
159
160 void ProcessDelayedMessage(double aSimTime, const WsfMessage& aMessage, Action* aActionPtr);
161
162 void ScheduleCompletionEvent(double aSimTime, const WsfMessage& aMessage, Action* aActionPtr, double aDelayTime);
163
165 std::list<Process> mProcessList;
166
171 Action mDefaultProcess;
172
174
175 WsfInternalLinks mDefaultInternalLinks;
176 wsf::ExternalLinks mDefaultExternalLinks;
178
180 WsfTimeDelayQueue mDelayQueue;
181
183 UtScriptData* mMessageVarPtr;
184
189 Action* mCurrentActionPtr;
190};
191
192#endif
ut::script::Data UtScriptData
Definition WsfScriptContext.hpp:47
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfMessageProcessor.hpp:58
WsfInternalLinks mInternalLinks
Definition WsfMessageProcessor.hpp:80
bool mIgnoreMessage
Definition WsfMessageProcessor.hpp:69
friend class WsfMessageProcessor
Definition WsfMessageProcessor.hpp:60
WsfRandomVariable mDelayTime
Definition WsfMessageProcessor.hpp:70
bool ProcessInput(UtInput &aInput, WsfMessageProcessor *aProcessorPtr, const std::string &aNamespace, bool aAllowScript)
Definition WsfMessageProcessor.cpp:429
bool mIsDefaultAction
Definition WsfMessageProcessor.hpp:68
Action(bool aIsDefaultAction)
Definition WsfMessageProcessor.cpp:393
bool Initialize(double aSimTime, WsfMessageProcessor *aProcessorPtr)
Definition WsfMessageProcessor.cpp:405
WsfStringId mScriptNameId
Definition WsfMessageProcessor.hpp:72
UtScript * mScriptPtr
Definition WsfMessageProcessor.hpp:71
wsf::ExternalLinks mExternalLinks
Definition WsfMessageProcessor.hpp:79
A unit of work within a time delay queue.
Definition WsfMessageProcessor.hpp:134
bool operator<(const DelayRequest &aRhs) const
Definition WsfMessageProcessor.hpp:141
DelayRequest(WsfMessageProcessor *aProcessorPtr, const WsfMessage &aMessage, Action *aActionPtr, double aDelayTime)
Definition WsfMessageProcessor.cpp:796
WsfMessage * mMessagePtr
Definition WsfMessageProcessor.hpp:146
WsfMessageProcessor * mProcessorPtr
Definition WsfMessageProcessor.hpp:145
Action * mActionPtr
Definition WsfMessageProcessor.hpp:147
int mPriority
Definition WsfMessageProcessor.hpp:149
Definition WsfMessageProcessor.hpp:118
std::list< Selector > mSelectorList
Definition WsfMessageProcessor.hpp:126
bool ProcessInput(UtInput &aInput, WsfMessageProcessor *aProcessorPtr, const std::string &aNamespace)
Definition WsfMessageProcessor.cpp:505
bool Initialize(double aSimTime, WsfMessageProcessor *aProcessorPtr)
Definition WsfMessageProcessor.cpp:493
Process()
Definition WsfMessageProcessor.cpp:486
Action mAction
Definition WsfMessageProcessor.hpp:127
Definition WsfMessageProcessor.hpp:86
int mSenderMask
Definition WsfMessageProcessor.hpp:112
UtScript * mScriptPtr
Definition WsfMessageProcessor.hpp:104
@ cPEER
Definition WsfMessageProcessor.hpp:91
@ cSUBORDINATE
Definition WsfMessageProcessor.hpp:92
@ cCOMMANDER
Definition WsfMessageProcessor.hpp:90
@ cSELF
Definition WsfMessageProcessor.hpp:93
WsfStringId mSensorNameId
Definition WsfMessageProcessor.hpp:108
WsfStringId mSystemNameId
Definition WsfMessageProcessor.hpp:111
WsfStringId mSensorModeId
Definition WsfMessageProcessor.hpp:110
WsfStringId mMessageTypeId
Definition WsfMessageProcessor.hpp:106
WsfStringId mScriptNameId
Definition WsfMessageProcessor.hpp:105
WsfStringId mMessageSubTypeId
Definition WsfMessageProcessor.hpp:107
Selector()
Definition WsfMessageProcessor.cpp:540
WsfStringId mSensorTypeId
Definition WsfMessageProcessor.hpp:109
bool ProcessAction(double aSimTime, const WsfMessage &aMessage)
Execute custom actions (scripts) based on the message type.
Definition WsfMessageProcessor.cpp:171
WsfMessageProcessor & operator=(const WsfMessageProcessor &)=delete
bool Initialize(double aSimTime) override
Definition WsfMessageProcessor.cpp:77
WsfMessageProcessor(WsfScenario &aScenario)
Definition WsfMessageProcessor.cpp:31
bool ProcessInput(UtInput &aInput) override
Definition WsfMessageProcessor.cpp:103
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
virtual bool ReceiveMessage(double aSimTime, const WsfMessage &aMessage)
Definition WsfPlatformPart.cpp:465
void TurnOn(double aSimTime) override
Definition WsfProcessor.cpp:183
WsfProcessor(const WsfScenario &aScenario)
Definition WsfProcessor.cpp:25
void TurnOff(double aSimTime) override
Definition WsfProcessor.cpp:169
Definition WsfRandomVariable.hpp:33
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
void Update(double aSimTime) override
Definition WsfScriptProcessor.cpp:281
WsfProcessor * Clone() const override
Definition WsfScriptProcessor.cpp:97
WsfScriptProcessor(const WsfScenario &aScenario)
Definition WsfScriptProcessor.cpp:30
bool Initialize(double aSimTime) override
Definition WsfScriptProcessor.cpp:104
bool ProcessInput(UtInput &aInput) override
Definition WsfScriptProcessor.cpp:186
void SendMessage(double aSimTime, const WsfMessage &aMessage) override
Definition WsfScriptProcessor.cpp:344
bool ProcessMessage(double aSimTime, const WsfMessage &aMessage) override
Definition WsfScriptProcessor.cpp:300
Definition WsfTimeDelayQueue.hpp:63
Definition WsfTimeDelayQueue.hpp:48
Copyrights Multiple, All Rights Reserved