MAK RTIspy API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
FederateProxy.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2025 MAK Technologies
3 ** All rights reserved.
4 *********************************************************************/
5 
6 #pragma once
7 
8 #include <rtiutil/rtiMsConfig.h>
9 
12 
13 #include <rtiutil/internalTypes.h>
14 
15 #include <vlutil/vlTime.h>
16 
17 #include <RTI/RTI1516.h>
18 
19 namespace rti1516_2025
20 {
21  class RTIambassadorFactory;
22  class RTIambassador;
23  namespace fedpro
24  {
25  class CallRequest;
26  class CallResponse;
27  class FomModule;
28  class FomModuleSet;
29  };
30 };
31 
32 namespace FedProSess
33 {
34  class DtCallRequestMessage;
35  class DtCallResponseMessage;
36 };
37 
38 class DtTcpMsgSocket;
40 
42 {
43 public:
44 
45  enum Status
46  {
47  Normal = 0,
48  Terminated = 1,
49  Disconnected = 2,
50  InternalError = 99
51  };
52 
53  static FederateProxy* create(DtTcpMsgSocket* msgSocket, unsigned long long sessionId);
54 
55 public:
56 
57  FederateProxy(DtTcpMsgSocket* msgSocket, unsigned long long sessionId);
58 
59  virtual ~FederateProxy();
60 
61  bool initialize();
62 
63  Status status() const;
64 
65  MAKRti::DtClock const& clock() const { return myClock; }
66 
67  unsigned long long sessionId() const { return mySessionId; }
68 
69  bool isConnected() const;
70  void setDisconnected();
71  void reconnect(DtTcpMsgSocket* msgSocket, unsigned long lastReceived);
72  void reconnectFailed(DtTcpMsgSocket* msgSocket);
73 
74  bool isJoined() const;
75  void resignReset();
76 
78 
79  int readAndProcess();
80 
81  int sendMessage(FedProSess::DtFedproMessage& message);
82  int sendMessage(FedProSess::DtFedproMessage* message);
83  int resendMessage(FedProSess::DtFedproMessage* message);
84 
85  unsigned long lastRecievedMessage() const { return myLastReceivedMessageNumber; }
86  unsigned long oldestSentMessage() const { return myMessageBuffer.size() > 0 ? myMessageBuffer.begin()->first : 0; }
87 
88  char* enumAsString(Status status) const;
89 
90  void print();
91 
92  DtTcpMsgSocket* socket() { return mySocket; }
93 
94  rti1516_2025::RTIambassador* rtiAmb();
95 
96 protected:
97 
98  typedef void (FederateProxy::*CallRequestFunction)(const rti1516_2025::fedpro::CallRequest& request,
99  unsigned long sequenceNumber, rti1516_2025::fedpro::CallResponse& response);
100  void processMessage(FedProSess::DtFedproMessage* message);
101  void processCallRequest(FedProSess::DtCallRequestMessage* message);
102  void processCallbackResponse(FedProSess::DtCallResponseMessage* message);
103 
104 
105  void handleMalformedRequest(rti1516_2025::fedpro::CallResponse& response, rti1516_2025::fedpro::CallRequest const& request,
106  char const* serviceCall);
107  void handleUnrecognizedRequest(rti1516_2025::fedpro::CallResponse& response, rti1516_2025::fedpro::CallRequest const& request,
108  char const* serviceCall);
109  void handleUnknownException(rti1516_2025::fedpro::CallResponse& response, char const* serviceCall);
110  void handleException(rti1516_2025::Exception const& ex, rti1516_2025::fedpro::CallResponse& response);
111  void sendResponse(unsigned long sequenceNumber, const rti1516_2025::fedpro::CallResponse& response);
112 
114 
115  void connect(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
117  void connectWithCredentialsRequest(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
119  void connectWithConfigurationRequest(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
121  void connectWithConfigurationAndCredentialsRequest(const rti1516_2025::fedpro::CallRequest& request,
122  unsigned long sequenceNumber, rti1516_2025::fedpro::CallResponse& response);
124 
125  void disconnect(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
127 
128  void listFederationExecutions(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
130  void listFederationExecutionMembers(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
132 
134 
135  void createFederationExecution(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
137  void createFederationExecutionWithTimeRequest(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
139  void createFederationExecutionWithModulesRequest(const rti1516_2025::fedpro::CallRequest& request,
140  unsigned long sequenceNumber, rti1516_2025::fedpro::CallResponse& response);
141  void createFederationExecutionWithModulesAndTimeRequest(const rti1516_2025::fedpro::CallRequest& request,
142  unsigned long sequenceNumber, rti1516_2025::fedpro::CallResponse& response);
143  void createFederationExecutionWithMIMRequest(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
145  void createFederationExecutionWithMIMAndTimeRequest(const rti1516_2025::fedpro::CallRequest& request,
146  unsigned long sequenceNumber, rti1516_2025::fedpro::CallResponse& response);
148 
149  void destroyFederationExecution(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
151 
153  void joinFederationExecution(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
155 
156  void resignFederationExecution(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
158 
159  void getObjectClassHandle(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
161 
162  void getAttributeHandle(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
164 
165  void publishObjectClassAttributes(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
167 
168  void subscribeObjectClassAttributes(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
170 
171  void reserveObjectName(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
173 
174  void registerObjectInstanceWithName(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
176 
177  void updateAttributeValues(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
179 
180  void deleteObjectInstance(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
182 
183  void getInteractionClassHandle(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
185 
186  void getParameterHandle(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
188 
189  void publishInteractionClass(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
191 
192  void subscribeInteractionClass(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
194 
195  void sendInteraction(const rti1516_2025::fedpro::CallRequest& request, unsigned long sequenceNumber,
197 
198  void bufferMessage(FedProSess::DtFedproMessage* message);
199  void clearBuffer(unsigned long lastReceived);
200 
201  bool convertFomModule(rti1516_2025::fedpro::FomModule const& inMod, std::wstring& outMod) const;
202  void convertFomModules(rti1516_2025::fedpro::FomModuleSet const& inMods, std::vector<std::wstring>& outMods) const;
203 
204  virtual rti1516_2025::FederateHandle decodeFederateHandle(rti1516_2025::VariableLengthData const& encodedValue) const;
205  virtual rti1516_2025::ObjectClassHandle decodeObjectClassHandle(rti1516_2025::VariableLengthData const& encodedValue) const;
206  virtual rti1516_2025::InteractionClassHandle decodeInteractionClassHandle(
207  rti1516_2025::VariableLengthData const& encodedValue) const;
208  virtual rti1516_2025::ObjectInstanceHandle decodeObjectInstanceHandle(
209  rti1516_2025::VariableLengthData const& encodedValue) const;
210  virtual rti1516_2025::AttributeHandle decodeAttributeHandle(rti1516_2025::VariableLengthData const& encodedValue) const;
211  virtual rti1516_2025::ParameterHandle decodeParameterHandle(rti1516_2025::VariableLengthData const& encodedValue) const;
212  virtual rti1516_2025::DimensionHandle decodeDimensionHandle(rti1516_2025::VariableLengthData const& encodedValue) const;
213  virtual rti1516_2025::MessageRetractionHandle decodeMessageRetractionHandle(
214  rti1516_2025::VariableLengthData const& encodedValue) const;
215  virtual rti1516_2025::RegionHandle decodeRegionHandle(rti1516_2025::VariableLengthData const& encodedValue) const;
216 
217 protected:
218 
219  DtUniquePtr<rti1516_2025::RTIambassador> myRtiAmbassador;
220  DtUniquePtr<FederateAmbassadorProxy> myFederateAmbassador;
221  std::map<int, CallRequestFunction> myCallRequestFunctions;
222  std::map<unsigned long, FedProSess::DtFedproMessage*> myMessageBuffer;
224  MAKRti::DtClock myClock;
225  unsigned long long mySessionId;
226  unsigned long mySequenceNumber;
231  std::string myJoinedFederation;
232  std::string myFederateType;
233  std::string myFederateName;
235  rti1516_2025::VariableLengthData myVarData;
236  std::vector<char> myDataBuff;
237  DtUniquePtr<rti1516_2025::LogicalTimeFactory> myTimeFactory;
238 
239 public:
241 };
DtUniquePtr< rti1516_2025::LogicalTimeFactory > myTimeFactory
Definition: FederateProxy.h:237
std::string myJoinedFederation
Definition: FederateProxy.h:231
unsigned long long sessionId() const
Definition: FederateProxy.h:67
#define DT_DLL_FEDPRO_SERVER
Definition: rtiMsConfig.h:157
virtual ParameterHandle getParameterHandle(const char *theName, InteractionClassHandle whichClass)
virtual EventRetractionHandle sendInteraction(InteractionClassHandle theInteraction, const ParameterHandleValuePairSet &theParameters, const FedTime &theTime, const char *theTag)
Definition: RTIambassador.pb.h:52845
rti1516_2025::RTIambassadorFactory theRtiAmbFactory
Definition: FederateProxy.h:240
virtual EventRetractionHandle updateAttributeValues(ObjectHandle theObject, const AttributeHandleValuePairSet &theAttributes, const FedTime &theTime, const char *theTag)
DtUniquePtr< FederateAmbassadorProxy > myFederateAmbassador
Definition: FederateProxy.h:220
MAKRti::DtClock myClock
Definition: FederateProxy.h:224
virtual void publishInteractionClass(InteractionClassHandle theInteraction)
ULong InteractionClassHandle
Definition: RTItypes13.h:106
Handle ParameterHandle
Definition: RTItypes13.h:114
std::string myFederateType
Definition: FederateProxy.h:232
Status
Definition: FederateProxy.h:45
Definition: callRequestMessage.h:21
DtTcpMsgSocket * socket()
Definition: FederateProxy.h:92
virtual FederateHandle joinFederationExecution(const char *yourName, const char *executionName, FederateAmbassadorPtr federateAmbassadorReference)
DtTcpMsgSocket * mySocket
Definition: FederateProxy.h:223
unsigned long oldestSentMessage() const
Definition: FederateProxy.h:86
DtUniquePtr< rti1516_2025::RTIambassador > myRtiAmbassador
Definition: FederateProxy.h:219
virtual EventRetractionHandle deleteObjectInstance(ObjectHandle theObject, const FedTime &theTime, const char *theTag)
unsigned long long mySessionId
Definition: FederateProxy.h:225
virtual void resignFederationExecution(ResignAction theAction)
virtual InteractionClassHandle getInteractionClassHandle(const char *theName)
Handle DimensionHandle
Definition: RTItypes13.h:118
rti1516_2025::FederateHandle myFederateHandle
Definition: FederateProxy.h:230
std::map< unsigned long, FedProSess::DtFedproMessage * > myMessageBuffer
Definition: FederateProxy.h:222
virtual void destroyFederationExecution(const char *executionName)
unsigned long lastRecievedMessage() const
Definition: FederateProxy.h:85
Definition: FederateProxy.h:41
The DtTcpMsgSocket class provides an address family independent TCP socket that handles RTI messages...
Definition: tcpMsgSocket.h:40
Definition: heartbeatResponseMessage.h:11
unsigned long mySequenceNumber
Definition: FederateProxy.h:226
std::string myFederateName
Definition: FederateProxy.h:233
Definition: datatypes.pb.h:7150
SessionStatus
Definition: sessionTerminatedMessage.h:15
MAKRti::DtClock const & clock() const
Definition: FederateProxy.h:65
virtual void createFederationExecution(const char *executionName, const char *FED)
Status myStatus
Definition: FederateProxy.h:228
ULong FederateHandle
Definition: RTItypes13.h:120
std::vector< char > myDataBuff
Definition: FederateProxy.h:236
Definition: datatypes.pb.h:7519
FedProSess::DtHeartbeatResponseMessage myHeartbeatResponseMessage
Definition: FederateProxy.h:234
virtual void subscribeObjectClassAttributes(ObjectClassHandle theClass, const AttributeHandleSet &attributeList, Boolean active=RTI_TRUE)
Definition: callResponseMessage.h:21
A simple class used to create an instance of an rti1516_2025::RTIambassador.
virtual void subscribeInteractionClass(InteractionClassHandle theClass, Boolean active=RTI_TRUE)
Definition: FederateAmbassadorProxy.h:32
ULong ObjectClassHandle
Definition: RTItypes13.h:104
The declaration of internal types.
unsigned long myLastReceivedMessageNumber
Definition: FederateProxy.h:227
Definition: fedproMessage.h:18
virtual AttributeHandle getAttributeHandle(const char *theName, ObjectClassHandle whichClass)
rti1516_2025::VariableLengthData myVarData
Definition: FederateProxy.h:235
Definition: RTIambassador.pb.h:56904
Handle AttributeHandle
Definition: RTItypes13.h:112
std::map< int, CallRequestFunction > myCallRequestFunctions
Definition: FederateProxy.h:221
virtual ObjectClassHandle getObjectClassHandle(const char *theName)
bool myIsRtiConnected
Definition: FederateProxy.h:229

Document ID: Generated on Wed Jul 8 16:20:32 EDT 2026 from SVN revision 291616
Copyright © 2005-2025 MAK Technologies Inc. All Rights Reserved (www.mak.com)