Ignore:
Timestamp:
Feb 24, 2009, 10:06:43 PM (15 years ago)
Author:
Christoph Mayer
Message:

-autolinks impl. (funktioniert noch nicht komplett, macht aber im moment nichts schlechter)
-einige fixes im ablauf etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/ariba/overlay/BaseOverlay.cpp

    r2473 r2483  
    6969//              ovl.visChangeNodeIcon(ovlId, nodeId, OvlVis::ICON_ID_CHARACTER_W);
    7070//      }
     71
     72        // timer for auto link management
     73        Timer::setInterval( 5000 );
     74        Timer::start();
    7175}
    7276
     
    7579        logging_info("deleting base overlay");
    7680
     81        Timer::stop();
    7782        bc.unregisterMessageReceiver( this );
    7883        bc.unregisterEventListener( this );
     
    147152        //
    148153        // create the overlay
    149         // and bootstrap against ourselfs
    150154        //
    151155
    152156        overlayInterface->createOverlay();
     157        BOOST_FOREACH( ServiceInterface* i, listenerMux.getOneList() ){
     158                i->onOverlayCreate( spovnetId );
     159        }
     160
     161        //
     162        // bootstrap against ourselfs
     163        //
     164
    153165        overlayInterface->joinOverlay();
     166        BOOST_FOREACH( ServiceInterface* i, listenerMux.getOneList() ){
     167                i->onJoinSuccess( spovnetId );
     168        }
    154169
    155170        ovl.visChangeNodeIcon ( ovlId, nodeId, OvlVis::ICON_ID_CAMERA );
    156171        ovl.visChangeNodeColor( ovlId, nodeId, OvlVis::NODE_COLORS_GREEN);
    157 
    158         // inform all registered services of the event
    159         BOOST_FOREACH( ServiceInterface* i, listenerMux.getOneList() ){
    160                 i->onOverlayCreate( spovnetId );
    161         }
    162172}
    163173
     
    245255        overmsg.encapsulate( const_cast<Message*>(message) );
    246256
     257        i->second.markused();
    247258        return bc.sendMessage( link, &overmsg );
    248259}
     
    263274
    264275        if( link == LinkID::UNSPECIFIED ){
    265                 logging_error( "no link could be found to send message to node " <<
    266                                 node.toString() << " for service " << service.toString() );
    267                 return -1;
    268         }
    269 
     276
     277                logging_info( "no link could be found to send message to node " <<
     278                                node.toString() << " for service " << service.toString() <<
     279                                ". creating auto link ...");
     280               
     281                const LinkID link = establishLink( node, service );
     282                LinkMapping::iterator i = linkMapping.find( link );
     283
     284                if( i == linkMapping.end() ){
     285                        logging_error( "failed to establish auto link to node " << node.toString() <<
     286                                        " for service " << service.toString() );
     287                        return -1;
     288                }
     289
     290                i->second.autolink = true;
     291
     292        } // if( link != LinkID::UNSPECIFIED )
     293
     294        i->second.markused();
    270295        return sendMessage( message, link );
    271296}
     
    352377                                " on link " << id.toString() );
    353378
    354                 OverlayMsg overMsg( OverlayMsg::OverlayMessageTypeUpdate, i->second.service, nodeId );
     379                OverlayMsg overMsg(
     380                        OverlayMsg::OverlayMessageTypeUpdate,
     381                        i->second.service,
     382                        nodeId
     383                        );
     384
    355385                bc.sendMessage( id, &overMsg );
     386                i->second.markused();
    356387
    357388        } // if( i == linkMapping.end() )
     
    397428        if( i->second.interface != NULL )
    398429                i->second.interface->onLinkChanged( id, nodeId, i->second.node );
     430
     431        i->second.markused();
    399432}
    400433
     
    412445        if( i->second.interface != NULL )
    413446                i->second.interface->onLinkFail( id, nodeId, i->second.node );
     447
     448        i->second.markused();
    414449}
    415450
     
    427462        if( i->second.interface != NULL )
    428463                i->second.interface->onLinkQoSChanged( id, nodeId, i->second.node, qos );
     464
     465        i->second.markused();
    429466}
    430467
     
    434471        OverlayMsg* overlayMsg = ((Message*)message)->decapsulate<OverlayMsg>();
    435472        if( overlayMsg == NULL ) return false;
     473
     474        // mark the link as in action
     475        LinkMapping::iterator item = linkMapping.find( link );
     476        if( item != linkMapping.end() ) item->second.markused();
    436477
    437478        //
     
    683724                i->second.interface = iface;
    684725                iface->onLinkUp( link, nodeId, sourcenode );
     726                i->second.markused();
    685727
    686728                return true ;
     
    828870}
    829871
     872void BaseOverlay::eventFunction(){
     873
     874        list<LinkID> oldlinks;
     875        time_t now = time(NULL);
     876
     877        // first gather all the links from linkMapping that need droppin
     878        // don't directly drop, as the dropLink function affects the
     879        // linkMapping structure that we are traversing here.
     880        // drop links after a timeout of 30s
     881
     882        // the macro gets confused if type is passed directly
     883        // because of the comma in the pair definition
     884        typedef pair<LinkID,LinkItem> pairitem;
     885
     886        BOOST_FOREACH( pairitem item, linkMapping ){
     887                if( item.second.autolink && difftime(now, item.second.lastuse) > 30)
     888                        oldlinks.push_back( item.first );
     889        }
     890
     891        BOOST_FOREACH( const LinkID lnk, oldlinks ){
     892                dropLink( lnk );
     893        }
     894}
     895
    830896}} // namespace ariba, overlay
Note: See TracChangeset for help on using the changeset viewer.