MAK Data Logger API Documentation for DIS
remoteControlInterface.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 1992-2010 VT MAK
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 
11 #pragma once
12 
13 #include "lgrSim.h"
14 
15 #include <lcRemoteLoggerConnection.h>
16 
17 #include <vlutil/vlString.h>
18 #include <vlpi/entityIdentifier.h>
19 #include <vlutil/vlInetSocket.h>
20 
21 #include <list>
22 #include <map>
23 #include <set>
24 
25 class DtExerciseConn;
26 class DtInteraction;
27 class DtLgrControlPdu;
28 class DtEntityIdentifier;
29 class DtLgrAcknowledgePdu;
30 class DtLgrConnectPdu;
31 class DtLgrDisconnectPdu;
32 class DtLgrLgrHeartbeatPdu;
33 class DtLgrResponsePdu;
34 class DtLgrTotalStatePdu;
35 class DtInetSocket;
36 
37 namespace MAKLogger
38 {
39  class DtAbsoluteTime;
40  class DtRelativeTime;
41  class DtCommand;
42  class DtRemoteControlDomainInterface;
43  class DtRemoteControlSystemInterface;
44  class DtRemoteControlPlaybackInterface;
45  class DtRemoteControlRecordInterface;
46  class DtRemoteControlEditorInterface;
47  class DtRemoteControlSimulationInterface;
49 
50  typedef DtU32 DtSequenceNumber;
51  typedef std::set<DtSequenceNumber> DtSequenceNumberSet;
52  typedef std::set<DtEntityIdentifier> DtEntityIdSet;
53 
54  typedef void (*DtLgrConnectCb)( DtLgrConnectPdu* connect, void* usr );
55  typedef void (*DtLgrDisconnectCb)( DtLgrDisconnectPdu* connect, void* usr );
56  typedef void (*DtLgrLgrHeartbeatCb)( DtLgrLgrHeartbeatPdu* connect, void* usr );
57  typedef void (*DtLgrAcknowledgeCb)( DtLgrAcknowledgePdu* connect, void* usr );
58  typedef void (*DtLgrResponseCb)( DtLgrResponsePdu* connect, void* usr );
59  typedef void (*DtLgrTotalStateCb)( DtLgrTotalStatePdu* connect, void* usr );
60  typedef void (*DtLgrConnectionAddedCb)( const DtRemoteLoggerConnection& loggerConnection, void* usr );
61  typedef void (*DtLgrConnectionRemovedCb)( const DtRemoteLoggerConnection& loggerConnection, void* usr );
62  typedef void (*DtLgrConnectionTimedOutCb)( const DtRemoteLoggerConnection& loggerConnection, void* usr );
63 
64  typedef void (*DtLgrCommandAcceptedCb)( DtSequenceNumber sequenceNumber, void* usr );
65  typedef void (*DtLgrCommandRejectedCb)(const DtEntityIdentifier& source, DtSequenceNumber sequenceNumber, void* usr );
66  typedef void (*DtLgrCommandTimedOutCb)( DtSequenceNumber sequenceNumber, void* usr );
67 
68 
74  {
75  public:
79  DtRemoteControlInterface(int numberOfLoggersToManage=0);
80 
82  virtual ~DtRemoteControlInterface();
83 
84  private:
89 
90  public:
91 
93  virtual void setConnection(DtExerciseConn* exconn, const DtEntityIdentifier& entityId);
94 
96  virtual void setConnection(const DtEntityIdentifier& id, DtInetSocket* socket);
97 
100  virtual void clearConnection();
101 
103  virtual void disconnect(const DtEntityIdentifier& entityId);
104 
106  virtual void tick();
107 
109 
110  virtual void setId( const DtEntityIdentifier& id );
111  virtual const DtEntityIdentifier& id() const;
113 
115 
116  virtual void setAcceptAnyId( bool acceptAny);
117  virtual bool acceptAnyId() const;
119 
121 
122  virtual DtTime connectionTimeout() const;
123  virtual void setConnectionTimeout(DtTime val);
125 
127 
128  virtual DtTime acknowledgeTimeout() const;
129  virtual void setAcknowledgeTimeout(DtTime val);
131 
133 
134  virtual void setNumberOfLoggers(int numberOfLoggersToManage);
135  virtual int numberOfLoggers() const;
137 
139  virtual void getConnectionIds(DtEntityIdSet& connectedLoggers) const;
140 
142  virtual void getConnectionIds(DtEntityIdSet& connectedLoggers,
143  const DtEntityIdentifier& idFilter) const;
144 
146  virtual int numberConnections() const;
147 
149  virtual DtRemoteLoggerConnection* getConnection(const DtEntityIdentifier& id);
150 
152  virtual DtTime lowestTime() const;
153 
155  virtual DtTime highestTime() const;
156 
158 
159  virtual DtRemoteControlSystemInterface* systemInterface();
160  virtual DtRemoteControlPlaybackInterface* playbackInterface();
161  virtual DtRemoteControlRecordInterface* recordInterface();
162  virtual DtRemoteControlEditorInterface* editorInterface();
163  virtual DtRemoteControlSimulationInterface* simulationInterface();
164  virtual DtRemoteControlSharedInterface* sharedInterface();
166 
171  virtual DtSequenceNumber sendCommandMessage(const DtCommand& command,
172  const DtEntityIdentifier& target=theWildcardAddress);
173 
179  virtual DtSequenceNumber sendCommandMessage(const DtCommand& command,
180  DtRemoteControlDomainInterface* domainInterface,
181  const DtEntityIdentifier& target=theWildcardAddress);
182 
187  virtual DtSequenceNumber sendLoggerControlMessage(DtLgrControlPdu& lgrControl,
188  const DtEntityIdentifier& target=theWildcardAddress);
189 
195  virtual DtSequenceNumber sendLoggerControlMessage(DtLgrControlPdu& lgrControl,
196  DtRemoteControlDomainInterface* domainInterface,
197  const DtEntityIdentifier& target=theWildcardAddress);
198 
200 
201  virtual void addCallback( DtLgrConnectCb cb, void* user );
202  virtual void removeCallback( DtLgrConnectCb );
203 
204  virtual void addCallback( DtLgrDisconnectCb cb, void* user );
205  virtual void removeCallback( DtLgrDisconnectCb );
206 
207  virtual void addCallback( DtLgrLgrHeartbeatCb cb, void* user );
208  virtual void removeCallback( DtLgrLgrHeartbeatCb );
209 
210  virtual void addCallback( DtLgrAcknowledgeCb cb, void* user );
211  virtual void removeCallback( DtLgrAcknowledgeCb );
212 
213  virtual void addCallback( DtLgrResponseCb cb, void* user );
214  virtual void removeCallback( DtLgrResponseCb );
215 
216  virtual void addCallback( DtLgrTotalStateCb cb, void* user );
217  virtual void removeCallback( DtLgrTotalStateCb );
218 
219  virtual void addCallbackConnectionAdded( DtLgrConnectionAddedCb cb, void* user );
220  virtual void removeCallbackConnectionAdded( DtLgrConnectionAddedCb );
221 
222  virtual void addCallbackConnectionRemoved( DtLgrConnectionRemovedCb cb, void* user );
223  virtual void removeCallbackConnectionRemoved( DtLgrConnectionRemovedCb );
224 
225  virtual void addCallbackConnectionTimedOut( DtLgrConnectionTimedOutCb cb, void* user );
226  virtual void removeCallbackConnectionTimedOut( DtLgrConnectionTimedOutCb );
227 
228  virtual void addCallbackCommandAccepted( DtLgrCommandAcceptedCb cb, void* user );
229  virtual void removeCallbackCommandAccepted( DtLgrCommandAcceptedCb );
230 
231  virtual void addCallbackCommandRejected( DtLgrCommandRejectedCb cb, void* user );
232  virtual void removeCallbackCommandRejected( DtLgrCommandRejectedCb );
233 
234  virtual void addCallbackCommandTimedOut( DtLgrCommandTimedOutCb cb, void* user );
235  virtual void removeCallbackCommandTimedOut( DtLgrCommandTimedOutCb );
236 
238 
239  public:
240 
242  static const DtEntityIdentifier& wildcardAddress();
243 
245  static const char* commandToString(int domain, int command);
246 
247  const DtRemoteLoggerMap& getMyRemoteLoggerMap() const;
248 
249  protected:
250 
252  virtual void lgrCtrlCallback( DtInteraction* );
253 
255  virtual void processControlPdus();
256 
258  virtual void processBackChannel();
259 
261  virtual void checkConnections();
262 
264  virtual bool isIdMatching(const DtEntityIdentifier& targetId, bool allowWildCard=true);
265 
267  virtual DtSequenceNumber nextSequenceNumber();
268 
270 
271  virtual void processTotalState(DtLgrTotalStatePdu* totalStatePdu);
272  virtual void processConnect(DtLgrConnectPdu* connectPdu);
273  virtual void processDisconnect(DtLgrDisconnectPdu* disconnectPdu);
274  virtual void processLgrHeartbeat(DtLgrLgrHeartbeatPdu* lgrHeartbeatPdu);
275  virtual void processAcknowledge(DtLgrAcknowledgePdu* acknowledgePdu);
276  virtual void processResponse(DtLgrResponsePdu* responsePdu);
278 
280  virtual void commandAccepted(DtSequenceNumber sequenceNumber);
281 
283  virtual void commandRejected(const DtEntityIdentifier& source, DtSequenceNumber sequenceNumber);
284 
286  virtual void commandTimedOut(DtSequenceNumber sequenceNumber);
287 
289  virtual void sendMessage(const DtLgrControlPdu& message);
290 
291  protected:
292 
294  static void lgrCtrlCb( DtInteraction*, void* );
295 
296  protected:
297 
299  typedef struct DtPendingAcknowledge
300  {
301  DtTime timeout;
304 
305  typedef std::map<DtSequenceNumber, DtPendingAcknowledge> DtPendingAcknowledgeList;
306  typedef std::map<DtSequenceNumber, DtTime> DtRejectCommandList;
307  typedef std::map<DtSequenceNumber, DtRemoteControlDomainInterface*> DtAcknowledgeDomainMap;
308 
309  typedef std::list<DtLgrControlPdu*> DtPduList;
310 
311  protected:
312 
313 
315  DtInetSocket* myBackChannelConnection;
316  DtInetBuffer myBackChannelBuffer;
317  DtEntityIdentifier myId;
320  DtRemoteLoggerMap myRemoteLoggers;
331  DtClock myClock;
332 
333  std::map<DtLgrConnectCb, void*> myConnectCallbacks;
334  std::map<DtLgrDisconnectCb, void*> myDisconnectCallbacks;
335  std::map<DtLgrAcknowledgeCb, void*> myAcknowledgeCallbacks;
336  std::map<DtLgrResponseCb, void*> myResponseCallbacks;
337  std::map<DtLgrTotalStateCb, void*> myTotalStateCallbacks;
338  std::map<DtLgrLgrHeartbeatCb, void*> myHeartbeatCallbacks;
339  std::map<DtLgrConnectionAddedCb, void*> myConnectionAddedCallbacks;
340  std::map<DtLgrConnectionRemovedCb, void*> myConnectionRemovedCallbacks;
341  std::map<DtLgrConnectionTimedOutCb, void*> myConnectionTimedOutCallbacks;
342  std::map<DtLgrCommandAcceptedCb, void*> myCommandAcceptedCallbacks;
343  std::map<DtLgrCommandRejectedCb, void*> myCommandRejectedCallbacks;
344  std::map<DtLgrCommandTimedOutCb, void*> myCommandTimedOutCallbacks;
345 
352 
353  protected:
354  static const DtU16 theAddressWildcard = ((1<<16)-1); // 65535 or 0xFFFF
355  static const DtEntityIdentifier theWildcardAddress;
356 
357  };
358 }

Document ID: Generated on Thu Apr 11 12:13:00 EDT 2013 from SVN revision 126011
Copyright © 2005-2012 VT MÄK. All Rights Reserved (www.mak.com)