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 #include "simlpy/interpreter_hooks.h"
00033
00034 #include "config.h"
00035
00036 #include "WirelessLink.h"
00037 #include "MobileNode.h"
00038 #include "simlpy/SimulationException.h"
00039 #include "pydtn/AliasLink.h"
00040
00041 #include <iostream>
00042
00043 using namespace Mobility;
00044
00045 WirelessLink::WirelessLink() :
00046 m_node( 0 )
00047 {
00048 }
00049
00050 WirelessLink::~WirelessLink()
00051 {
00052 }
00053
00054 void
00055 WirelessLink::configure( const ArgList& args )
00056 {
00057 unsigned int nargs = args.size();
00058 if ( 0 == nargs )
00059 {
00060 std::cerr << "no configuration options were passed" << std::endl;
00061 throw SimulationException( __FILE__ , __LINE__ );
00062 }
00063 std::string command = parse_string(args[0]);
00064 if ( "connect" == command )
00065 {
00066 if ( nargs < 2 )
00067 {
00068 std::cerr << "config('connect') requires two arguments"
00069 << std::endl;
00070 throw SimulationException( __FILE__ , __LINE__ );
00071 }
00072 MobileNode* node = 0;
00073 try
00074 {
00075 ItemWrapper item = resolve_symbol( args[1] );
00076 if ( 0 != item.type.find( MobileNode::kIdentifier ) )
00077 {
00078 throw SimulationException( __FILE__ , __LINE__ );
00079 }
00080 node = (MobileNode*)(item.item);
00081 m_source = node;
00082 m_destination = node;
00083 m_node = node;
00084 if ( 0 != m_source )
00085 {
00086 m_source->addLink( new AliasLink( &m_link ) );
00087 }
00088 }
00089 catch ( ... )
00090 {
00091 std::cerr << "The second argument of "
00092 << "config('connect',node) must be a mobile node"
00093 << std::endl;
00094 throw;
00095 }
00096 return;
00097 }
00098 WrapLink::configure(args);
00099 }