WSF
WsfXIO_AutoDisMapping.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 WSFXIO_AUTODISMAPPING_HPP
13#define WSFXIO_AUTODISMAPPING_HPP
14
15#include "wsf_export.h"
16
17#include <map>
18#include <vector>
19
20class DisEntityId;
21#include "UtCallbackHolder.hpp"
23class WsfDisInterface;
24class WsfExtInterface;
25class WsfMessage;
26class WsfPlatform;
27class WsfScenario;
28class WsfSimulation;
29#include "WsfStringId.hpp"
37
38namespace wsf
39{
40namespace comm
41{
42class Comm;
43}
44} // namespace wsf
45
48{
49public:
50 WsfXIO_AutoDisMapping(WsfXIO_Simulation& aXIO_Simulation, WsfXIO_DisExtension* aDisExtensionPtr);
51
53
54 bool Initialize();
55
56 bool DelayDisEntityState(const DisEntityId& aEntityId);
57
58 WsfPlatform* NewDisPlatform(WsfStringId aPlatformType, WsfDisEntityState* aEntityStatePtr);
59
60 bool CanTranslateMessage(WsfStringId aMessageType) const
61 {
62 return mMessageTranslators.find(aMessageType) != mMessageTranslators.end();
63 }
64
65 void HandlePlatformInfo(WsfXIO_DisPlatformInfoPkt& aPkt);
66
68 {
69 // To be replaced by map
71 {
72 for (size_t i = 0; i < mPlatforms.size(); ++i)
73 {
74 if (mPlatforms[i].mPlatformIndex == aIndex)
75 {
76 return &mPlatforms[i];
77 }
78 }
79 return nullptr;
80 }
83 std::vector<WsfXIO_DisPlatformInfoPkt> mPlatforms;
84 };
85
87
98
99 void HandleConnect(WsfXIO_Connection* aConnectionPtr);
100
101 void HandleDisconnect(WsfXIO_Connection* aConnectionPtr);
102
103 bool TranslateTrack(double aSimTime,
104 const WsfXIO_DisMessagePkt& aMessagePkt,
105 ConnectionData* aConnectionDataPtr,
106 WsfTrack& aTrack);
107
108 bool TranslatePlatformIndex(size_t& aIndex, ConnectionData* aConnectionDataPtr);
109
110 void TranslateTime(double aSimTime, WsfXIO_DisMessagePkt& aPkt, double& aRemoteSimTime);
111
112 bool ForwardMessage(double aSimTime, ConnectionData* aConnectionData, WsfXIO_DisMessagePkt& aPkt, WsfMessage& aMessage);
113
115 {
117
119
121 : mThisPtr(aThisPtr)
122 , mMethod(aMethod)
123 {
124 }
125
126 bool operator()(double aSimTime, WsfMessage* aMessagePtr, ConnectionData* aConnectionPtr, WsfXIO_DisMessagePkt& aMessagePkt)
127 {
128 return (mThisPtr->*mMethod)(aSimTime, aMessagePtr, aConnectionPtr, aMessagePkt);
129 }
130
133 };
134
135 RemotePlatformInfo* FindPlatform(int aConnectionId, size_t aPlatformIndex);
136
137 WsfPlatform* FindRemotePlatform(size_t aRemoteIndex, ConnectionData* aDataPtr);
138
139 WsfXIO_DisPlatformInfoPkt* FindPlatformData(const DisEntityId& aEntity, ConnectionData*& aConnectionPtr);
140
142
143 bool TranslateTrackMessage(double aSimTime,
144 WsfMessage* aMessagePtr,
145 ConnectionData* aConnectionData,
147
148 bool TranslateTrackDropMessage(double aSimTime,
149 WsfMessage* aMessagePtr,
150 ConnectionData* aConnectionData,
152
153 bool TranslateTaskAssignMessage(double aSimTime,
154 WsfMessage* aMessagePtr,
155 ConnectionData* aConnectionData,
157
158 bool TranslateTaskStatusMessage(double aSimTime,
159 WsfMessage* aMessagePtr,
160 ConnectionData* aConnectionData,
162
163 bool TranslateTaskCancelMessage(double aSimTime,
164 WsfMessage* aMessagePtr,
165 ConnectionData* aConnectionData,
167
168 bool TranslateTaskControlMessage(double aSimTime,
169 WsfMessage* aMessagePtr,
170 ConnectionData* aConnectionData,
172
173 bool TranslateAssociationMessage(double aSimTime,
174 WsfMessage* aMessagePtr,
175 ConnectionData* aConnectionData,
177
178 bool TranslateStatusMessage(double aSimTime,
179 WsfMessage* aMessagePtr,
180 ConnectionData* aConnectionData,
182
183 void PlatformInitialized(double aSimTime, WsfPlatform* aPlatformPtr);
184
185 void PlatformDeleted(double aSimTime, WsfPlatform* aPlatformPtr);
186
187protected:
189
190 bool IsAutoMapped(const DisEntityId& aId);
191
192 void RemovePlatformFromConnection(ConnectionData* aDataPtr, unsigned int aRemoteIndex);
193
194 void UpdateRemovedPlatforms(int aConnectionId, size_t aRemoteIndex, WsfPlatform* aPlatformPtr);
195
196 typedef std::map<WsfStringId, TranslateMessageFunction> MessageTranslatorMap;
198 typedef std::pair<int, size_t> PlatformId;
199 typedef std::map<PlatformId, RemotePlatformInfo*> RemotePlatformMap;
200 typedef std::map<PlatformId, size_t> RemovedPlatformMap;
201
208 std::vector<ConnectionData*> mConnections;
209 std::vector<WsfXIO_EntityId> mDelayedEntityStates;
212
215
220
221 UtCallbackHolder mCallbacks;
222};
223#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfDisEntityState.hpp:38
Definition WsfDisInterface.hpp:83
The WSF Ext is code which is shared between common external interfaces like DIS and HLA.
Definition WsfExtInterface.hpp:183
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
The main controller for a simulation.
Definition WsfSimulation.hpp:109
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
void PlatformDeleted(double aSimTime, WsfPlatform *aPlatformPtr)
Definition WsfXIO_AutoDisMapping.cpp:546
void RemovePlatformFromConnection(ConnectionData *aDataPtr, unsigned int aRemoteIndex)
Removes a platform from the list of platforms maintained by a connection.
Definition WsfXIO_AutoDisMapping.cpp:790
bool TranslateTrackMessage(double aSimTime, WsfMessage *aMessagePtr, ConnectionData *aConnectionData, WsfXIO_DisMessagePkt &aPkt)
Definition WsfXIO_AutoDisMapping.cpp:445
WsfXIO_Interface * mInterfacePtr
Definition WsfXIO_AutoDisMapping.hpp:206
RemotePlatformMap mRemotePlatforms
Maps a PlatformID to RemotePlatformInfo.
Definition WsfXIO_AutoDisMapping.hpp:214
void TranslateTime(double aSimTime, WsfXIO_DisMessagePkt &aPkt, double &aRemoteSimTime)
Definition WsfXIO_AutoDisMapping.cpp:566
bool TranslateTaskStatusMessage(double aSimTime, WsfMessage *aMessagePtr, ConnectionData *aConnectionData, WsfXIO_DisMessagePkt &aPkt)
Definition WsfXIO_AutoDisMapping.cpp:409
ConnectionData * FindConnectionData(WsfXIO_Connection *aConnectionPtr)
Definition WsfXIO_AutoDisMapping.cpp:657
void HandleDisconnect(WsfXIO_Connection *aConnectionPtr)
Definition WsfXIO_AutoDisMapping.cpp:747
WsfXIO_DisExtension * mDisExtensionPtr
Definition WsfXIO_AutoDisMapping.hpp:207
const WsfScenario & mScenario
Definition WsfXIO_AutoDisMapping.hpp:203
void HandleConnect(WsfXIO_Connection *aConnectionPtr)
Definition WsfXIO_AutoDisMapping.cpp:734
std::map< PlatformId, size_t > RemovedPlatformMap
Definition WsfXIO_AutoDisMapping.hpp:200
RemovedPlatformMap mRemovedPlatforms
Definition WsfXIO_AutoDisMapping.hpp:219
void HandleDisMessage(WsfXIO_DisMessagePkt &aPkt)
Definition WsfXIO_AutoDisMapping.cpp:670
std::vector< WsfXIO_EntityId > mDelayedEntityStates
Definition WsfXIO_AutoDisMapping.hpp:209
bool TranslatePlatformIndex(size_t &aIndex, ConnectionData *aConnectionDataPtr)
Definition WsfXIO_AutoDisMapping.cpp:300
bool TranslateTaskCancelMessage(double aSimTime, WsfMessage *aMessagePtr, ConnectionData *aConnectionData, WsfXIO_DisMessagePkt &aPkt)
Definition WsfXIO_AutoDisMapping.cpp:427
WsfXIO_DisRequestManager * mDisRequestManagerPtr
Definition WsfXIO_AutoDisMapping.hpp:210
WsfPlatform * FindRemotePlatform(size_t aRemoteIndex, ConnectionData *aDataPtr)
Definition WsfXIO_AutoDisMapping.cpp:571
MessageTranslatorMap mMessageTranslators
Definition WsfXIO_AutoDisMapping.hpp:211
bool TranslateTrackDropMessage(double aSimTime, WsfMessage *aMessagePtr, ConnectionData *aConnectionData, WsfXIO_DisMessagePkt &aPkt)
Definition WsfXIO_AutoDisMapping.cpp:454
WsfSimulation & mSimulation
Definition WsfXIO_AutoDisMapping.hpp:202
WsfXIO_AutoDisMapping(WsfXIO_Simulation &aXIO_Simulation, WsfXIO_DisExtension *aDisExtensionPtr)
Definition WsfXIO_AutoDisMapping.cpp:89
bool TranslateTaskAssignMessage(double aSimTime, WsfMessage *aMessagePtr, ConnectionData *aConnectionData, WsfXIO_DisMessagePkt &aPkt)
Definition WsfXIO_AutoDisMapping.cpp:389
std::map< PlatformId, RemotePlatformInfo * > RemotePlatformMap
Definition WsfXIO_AutoDisMapping.hpp:199
std::pair< int, size_t > PlatformId
ID of a remote platform (connection ID, remote platform index).
Definition WsfXIO_AutoDisMapping.hpp:198
WsfExtInterface * mExtInterfacePtr
Definition WsfXIO_AutoDisMapping.hpp:205
bool ForwardMessage(double aSimTime, ConnectionData *aConnectionData, WsfXIO_DisMessagePkt &aPkt, WsfMessage &aMessage)
Definition WsfXIO_AutoDisMapping.cpp:353
WsfDisInterface * mDisInterfacePtr
Definition WsfXIO_AutoDisMapping.hpp:204
bool TranslateTaskControlMessage(double aSimTime, WsfMessage *aMessagePtr, ConnectionData *aConnectionData, WsfXIO_DisMessagePkt &aPkt)
Definition WsfXIO_AutoDisMapping.cpp:479
WsfXIO_DisPlatformInfoPkt * FindPlatformData(const DisEntityId &aEntity, ConnectionData *&aConnectionPtr)
Definition WsfXIO_AutoDisMapping.cpp:712
void PlatformInitialized(double aSimTime, WsfPlatform *aPlatformPtr)
Definition WsfXIO_AutoDisMapping.cpp:527
bool TranslateStatusMessage(double aSimTime, WsfMessage *aMessagePtr, ConnectionData *aConnectionData, WsfXIO_DisMessagePkt &aPkt)
Definition WsfXIO_AutoDisMapping.cpp:512
bool DelayDisEntityState(const DisEntityId &aEntityId)
Called from WsfDisInterface.
Definition WsfXIO_AutoDisMapping.cpp:182
bool Initialize()
Definition WsfXIO_AutoDisMapping.cpp:119
bool CanTranslateMessage(WsfStringId aMessageType) const
Definition WsfXIO_AutoDisMapping.hpp:60
bool TranslateTrack(double aSimTime, const WsfXIO_DisMessagePkt &aMessagePkt, ConnectionData *aConnectionDataPtr, WsfTrack &aTrack)
Definition WsfXIO_AutoDisMapping.cpp:328
RemotePlatformInfo * FindPlatform(int aConnectionId, size_t aPlatformIndex)
Definition WsfXIO_AutoDisMapping.cpp:582
ConnectionData * GetConnection(WsfXIO_Connection *aConnectionPtr)
Definition WsfXIO_AutoDisMapping.cpp:644
bool TranslateAssociationMessage(double aSimTime, WsfMessage *aMessagePtr, ConnectionData *aConnectionData, WsfXIO_DisMessagePkt &aPkt)
Definition WsfXIO_AutoDisMapping.cpp:497
bool IsAutoMapped(const DisEntityId &aId)
Definition WsfXIO_AutoDisMapping.cpp:150
void UpdateRemovedPlatforms(int aConnectionId, size_t aRemoteIndex, WsfPlatform *aPlatformPtr)
Update the 'removed platforms' list as necessary.
Definition WsfXIO_AutoDisMapping.cpp:803
WsfPlatform * NewDisPlatform(WsfStringId aPlatformType, WsfDisEntityState *aEntityStatePtr)
Called from WsfDisInterface.
Definition WsfXIO_AutoDisMapping.cpp:207
UtCallbackHolder mCallbacks
Definition WsfXIO_AutoDisMapping.hpp:221
std::vector< ConnectionData * > mConnections
Definition WsfXIO_AutoDisMapping.hpp:208
std::map< WsfStringId, TranslateMessageFunction > MessageTranslatorMap
Definition WsfXIO_AutoDisMapping.hpp:196
Definition WsfXIO_Connection.hpp:37
Definition WsfXIO_DisExtension.hpp:29
Definition WsfXIO_SimPacketRegistry.hpp:42
Definition WsfXIO_PacketRegistry.hpp:627
Definition WsfXIO_DisService.hpp:38
Definition WsfXIO_DisService.hpp:28
Definition WsfXIO_Interface.hpp:54
Definition WsfXIO_Simulation.hpp:49
Definition WsfComm.hpp:43
Definition WsfComm.cpp:34
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Definition WsfXIO_AutoDisMapping.hpp:68
std::vector< WsfXIO_DisPlatformInfoPkt > mPlatforms
Definition WsfXIO_AutoDisMapping.hpp:83
WsfXIO_DisPlatformInfoPkt * FindPlatformData(int aIndex)
Definition WsfXIO_AutoDisMapping.hpp:70
WsfXIO_Connection * mConnectionPtr
Definition WsfXIO_AutoDisMapping.hpp:82
WsfXIO_DisRequest * mDisRequestPtr
Definition WsfXIO_AutoDisMapping.hpp:81
Data pertaining to a platform owned by an external simulation.
Definition WsfXIO_AutoDisMapping.hpp:90
WsfXIO_DisPlatformInfoPkt mPlatformInfo
Information about the platform.
Definition WsfXIO_AutoDisMapping.hpp:92
ConnectionData * mConnectionPtr
Connection to the simulation which owns the platform.
Definition WsfXIO_AutoDisMapping.hpp:94
WsfPlatform * mPlatformPtr
Pointer to the platform controlled by DIS.
Definition WsfXIO_AutoDisMapping.hpp:96
MethodPtr mMethod
Definition WsfXIO_AutoDisMapping.hpp:132
TranslateMessageFunction()
Definition WsfXIO_AutoDisMapping.hpp:118
bool operator()(double aSimTime, WsfMessage *aMessagePtr, ConnectionData *aConnectionPtr, WsfXIO_DisMessagePkt &aMessagePkt)
Definition WsfXIO_AutoDisMapping.hpp:126
TranslateMessageFunction(WsfXIO_AutoDisMapping *aThisPtr, MethodPtr aMethod)
Definition WsfXIO_AutoDisMapping.hpp:120
WsfXIO_AutoDisMapping * mThisPtr
Definition WsfXIO_AutoDisMapping.hpp:131
bool(WsfXIO_AutoDisMapping::* MethodPtr)(double, WsfMessage *, ConnectionData *, WsfXIO_DisMessagePkt &)
Definition WsfXIO_AutoDisMapping.hpp:116
Copyrights Multiple, All Rights Reserved