SampleApp.cc

00001 // Copyright 2008 Michael Marsh, University of Maryland.
00002 //
00003 // This file is part of pydtn.
00004 //
00005 // pydtn is free software: you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License as published by
00007 // the Free Software Foundation, either version 3 of the License, or
00008 // (at your option) any later version.
00009 //
00010 // pydtn is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with pydtn.  If not, see <http://www.gnu.org/licenses/>.
00017 //
00018 // The views and conclusions contained in the software and documentation
00019 // are those of the authors and should not be interpreted as representing
00020 // official policies, either expressed or implied, of the University
00021 // of Maryland.
00022 //
00023 // pydtn extends and embeds the Python interpreter, which is
00024 // Copyright 2001-2006 Python Software Foundation, All Rights Reserved,
00025 // and is released under the PSF License Agreement.
00026 //
00027 // RANLUX random number generation uses the Boost library,
00028 // Copyright 1994-2006 by various authors (details in individual files),
00029 // which is released under the Boost Software License, Version 1.0.
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 }

Generated on Mon Mar 24 11:15:46 2008 for Pydtn Simulator by  doxygen 1.5.4