00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "simlpy/interpreter_defs.h"
00032
00033 #include "SampleApp.h"
00034 #include "Manager.h"
00035 #include "dtn/Bundle.h"
00036 #include "pydtn/WrapNode.h"
00037 #include "pydtn/BundleEvent.h"
00038 #include "simlpy/Clock.h"
00039 #include <iostream>
00040
00041 using namespace SampleAppNS;
00042
00043 static unsigned char initstring[] = {'s','a','m','p','l','e','a','p','p'};
00044 DTN::ByteString SampleApp::m_appID(initstring);
00045
00046 SampleApp::SampleApp( Manager* m ) :
00047 Application(),
00048 m_manager(m)
00049 {
00050 }
00051
00052 SampleApp::~SampleApp()
00053 {
00054 }
00055
00056 void
00057 SampleApp::send( const DTN::ByteString& dest,
00058 const DTN::ByteString& data,
00059 const Time& when )
00060 {
00061 if ( 0 == m_owner ) return;
00062 WrapNode* wn = m_manager->lookup(this);
00063 if ( 0 == wn ) return;
00064 Time e = when + wn->bundleLifetime();
00065 DTN::Bundle::BundleType type = DTN::Bundle::kData | DTN::Bundle::kCustodial;
00066 DTN::Bundle* b = new DTN::Bundle( m_owner->nextSeq(),
00067 m_owner->addr(),
00068 dest,
00069 data,
00070 when.tv,
00071 e.tv,
00072 type,
00073 m_appID );
00074 Clock::schedule( new BundleEvent(wn,wn,when,when,b,true) );
00075 }
00076
00077 void
00078 SampleApp::process( const DTN::Bundle& b )
00079 {
00080 std::cout << "sample app: got a bundle of size " << b.size() << std::endl;
00081 }