MAK RTIspy API Documentation for HLA Evolved
distributorThreadEvents.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2007 MaK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 /*******************************************************************************
6 ** $RCSfile: distributorThreadEvents.h,v $ $Revision: 1.3 $ $State: Exp $
7 *******************************************************************************/
8 
11 
12 #ifndef DtDistributorThreadEvents_H_
13 #define DtDistributorThreadEvents_H_
14 
15 #include <rtiMsConfig.h>
16 #include <memory>
17 #include <typeinfo>
18 #include <vector>
19 #include <map>
20 #include <vlutil/vlString.h>
21 #include "rtiMsg.h"
22 #include "fomModuleRequestMsg.h"
24 
25 class DtFedExec;
28 class DtFileInformation;
32 class DtFederate;
33 
34 
35 //base class enforces clone() ability
39 {
40 public:
41 
43  virtual DtDistributorThreadEvent* clone() const = 0;
44 
49  virtual bool operator==( const DtDistributorThreadEvent& value )
50  {
51  return ( typeid( *this ) == typeid( value ));
52  }
53 
56  virtual void processResults() {}
57 };
58 
59 
61 
66 {
67 public:
68 
70  virtual void operator()( const DtAsyncFileDistributorRunnable& dist ) = 0;
71 };
72 
73 
75 {
76 public:
77  DtGetFileFromDistributorCmd( const std::vector<DtString>& fileNames,
78  const unsigned long ID) :
79  DtFedExecDistribFunctor(), myFileNames ( fileNames ), myInitiatorID(ID) {}
80 
82  virtual void operator()(const DtAsyncFileDistributorRunnable& dist );
84  { return new DtGetFileFromDistributorCmd(myFileNames, myInitiatorID); }
85 
86  virtual void processResults();
87 
88  std::vector<DtString> myFileNames;
89  unsigned long myInitiatorID;
90 };
91 
93 {
94 public:
95  DtFedexRemoveFileCmd( unsigned long ID, const std::vector<DtString>& fileNames ) :
96  DtFedExecDistribFunctor(), myFileNames( fileNames), myInitiatorID(ID) {}
97  virtual ~DtFedexRemoveFileCmd() {}
98  virtual void operator()(const DtAsyncFileDistributorRunnable& dist );
100  { return new DtFedexRemoveFileCmd(myInitiatorID, myFileNames); }
101 
102  std::vector<DtString> myFileNames;
103  unsigned long myInitiatorID;
104 };
105 
107 {
108 public:
109  DtPushFilesToAllFederatesCmd( const DtString fileName,
110  const char* fileBuff, unsigned long fileSize,
111  const unsigned int ID ) :
112  DtFedExecDistribFunctor(), myFileBuffer(fileBuff), myFileName(fileName),
113  myFileSize(fileSize), myDestination(ID) {}
115  virtual void operator()(const DtAsyncFileDistributorRunnable& dist);
117  { return new DtPushFilesToAllFederatesCmd(myFileName,
118  myFileBuffer, myFileSize, myDestination); }
119 
120  const char* myFileBuffer;
121  unsigned long myFileSize;
122  DtString myFileName;
123  unsigned long myDestination;
124 };
125 
126 
128 {
129 public:
130  DtDistributionMsgCmd(unsigned long ID, const DtFomModuleDistributionMsg msg ) :
131  DtFedExecDistribFunctor( ), myMsg(msg), myInitiatorID(ID) {};
132 
133  virtual DtDistributorThreadEvent* clone() const
134  {
135  return new DtDistributionMsgCmd(myInitiatorID, myMsg );
136  }
137  virtual void operator()(const DtAsyncFileDistributorRunnable& dist);
139  unsigned long myInitiatorID;
140 };
141 
142 
144 {
145 public:
146  DtFomModuleRequestMsgCmd( unsigned long ID, const DtFomModuleRequestMsg msg ) :
147  DtFedExecDistribFunctor(), myMsg(msg), myInitiatorID(ID) {};
149  {
150  return new DtFomModuleRequestMsgCmd(myInitiatorID, myMsg);
151  }
152  virtual void operator()(const DtAsyncFileDistributorRunnable& dist);
154  unsigned long myInitiatorID;
155 };
156 
160 {
161 public:
162  DtFedexTakeFileCmd( unsigned long ID,
163  const std::map<DtString, DtFileInformation*>& files ) :
165  myFiles(files), myInitiatorID(ID) {};
166  static DtFedexTakeFileCmd* createNamesOnlyTakeFileEvent(DtFedExec* parent,
167  const std::vector<DtString>& fileNames);
169  virtual DtDistributorThreadEvent* clone() const
170  {
171  return new DtFedexTakeFileCmd( myInitiatorID, myFiles );
172  }
173  virtual void operator()(const DtAsyncFileDistributorRunnable& dist);
174  std::map<DtString, DtFileInformation*> myFiles;
175  unsigned long myInitiatorID;
176 };
177 
178 
180 
181 
182 
183 
184 //Event Definitions
186 {
187 public:
188  virtual ~DtDistribFunctor() {};
189  virtual void operator()( const DtAsyncFileDistributorRunnable& dist ) = 0;
190 };
191 
192 
196 {
197 public:
199  DtDistribFunctor(), myParent ( parent) { };
200  virtual void operator()( const DtAsyncFileDistributorRunnable& dist ) {}
201 
203 };
204 
206 {
207 public:
209  DtFedexDistributionEvent( parent ) {};
210 
211  virtual DtDistributorThreadEvent* clone() const
212  {
213  return new DtRequestedModulesArrivedEvent( myParent );
214  }
215  virtual void operator()( const std::vector<DtString>& fileNames);
216  virtual void processResults();
217 
218  std::vector<DtString> myFileNames;
219 };
220 
222 {
223 public:
225  DtFedexDistributionEvent( parent ) {};
227  {
228  return new DtFedFileRequestMsgEvent( myParent );
229  }
230  virtual void operator()( const std::vector<DtString>& fileNames, unsigned long fedID);
231  virtual void processResults();
232 
233  std::vector<DtString> myFileNames;
234  unsigned long myInitiatingID;
235 };
236 
237 
239 {
240 public:
242  DtFedexDistributionEvent(parent) {};
243  virtual DtDistributorThreadEvent* clone() const { return new DtFedExTakeFileEvent(myParent); }
244  virtual void operator()( const std::map<DtString, DtFileInformation*>& fileNames );
245  virtual void processResults();
246 
247  std::map<DtString, DtFileInformation*> myFileNames;
248 };
249 
251 {
252 public:
254  DtFedexDistributionEvent(parent) {};
256  {
257  return new DtFileRequestedEvent( myParent );
258  }
259  virtual void operator()( const std::vector<DtString>& files );
260  virtual void processResults();
261 
262  std::vector<DtString> myFileNames;
263 };
264 
266 {
267 public:
269  DtFedexDistributionEvent(parent) {};
270 
272  {
273  return new DtFileReceivedEvent( myParent );
274  }
275  virtual void operator()( const DtFomModuleDistributionMsg& msg );
276  virtual void processResults();
277 
278 
280 };
281 
283 {
284 public:
286  DtFedexDistributionEvent( parent ) {};
288  {
289  return new DtPushFedFileToFederatesEvent(myParent);
290  }
291  virtual void operator()(DtString name, int fileSize, const char* buff);
292  virtual void processResults();
293 
294  DtString myFileName;
296  const char* myBuff;
297 };
298 
299 
300 
302 {
303 public:
305  mySingleFederate(0),
308  {
309  return new DtPushFedFileToSingleFederateEvent(myParent);
310  }
311  virtual void operator()(DtString name, int fileSize, const char* buff, DtFederateHandle recipientHandle)
312  {
313  DtPushFedFileToFederatesEvent::operator ()(name, fileSize, buff);
314  mySingleFederate = recipientHandle;
315  }
316  virtual void processResults();
318 };
319 
320 
321 
323 
324 
326 {
327 public:
328  enum EventType {
337  BackendExited
338  };
339 
341  const DtDistributorThreadEvent& newFunctor,
342  bool addition = true ):
343  myType( type ),
344  myAddition( addition ),
345  myFunctor( newFunctor.clone() ),
346  myMsgKind(),
347  myIsMomMsg( false )
348  {}
349 
351  const DtDistributorThreadEvent& newFunctor,
352  bool addition,
353  DtRtiMsgKind kind,
354  bool isMomMsg = false) :
355  myType( type ),
356  myAddition( addition ),
357  myFunctor( newFunctor.clone() ),
358  myMsgKind( kind ),
359  myIsMomMsg( isMomMsg )
360  {}
361 
363  myType( orig.myType ),
364  myAddition( orig.myAddition ),
365  myFunctor( orig.myFunctor->clone() ),
366  myMsgKind( orig.myMsgKind ),
367  myIsMomMsg( orig.myIsMomMsg )
368  {}
369 
370  virtual ~DtDistribFunctorChangeRequest() { delete myFunctor; myFunctor = 0; }
371 
373  {
374  return new DtDistribFunctorChangeRequest( myType, *myFunctor, myAddition,
375  myMsgKind, myIsMomMsg );
376  }
377 
379  {
380  if ( this == &orig ) return *this;
381 
382  DtDistributorThreadEvent* copy = orig.myFunctor->clone();
383  myFunctor = copy;
384  myType = orig.myType;
385  myAddition = orig.myAddition;
386  myMsgKind = orig.myMsgKind;
387  myIsMomMsg = orig.myIsMomMsg;
388 
389  return *this;
390  }
391 
392 
398 };
399 
400 
401 
402 
403 #endif //DtDistributorThreadEvents_H_

Document ID: Generated on Tue May 7 16:26:47 EDT 2013 from SVN revision 126903
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)