- Timestamp:
- Apr 22, 2009, 9:07:53 PM (16 years ago)
- Location:
- sample/pingpong
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
sample/pingpong/PingPong.cpp
r2483 r3037 12 12 use_logging_cpp( PingPong ); 13 13 14 // the service id of the ping pong service14 // the service that the pingpong wants to use 15 15 ServiceID PingPong::PINGPONG_ID = ServiceID( 111 ); 16 16 … … 40 40 41 41 // get initiator flag 42 this->isInitiator = Configuration::instance().read<bool> 42 this->isInitiator = Configuration::instance().read<bool>("node.initiator"); 43 43 44 44 // get node name 45 45 Name nodeName = Name::UNSPECIFIED; 46 if (config.exists("node.name")) nodeName 47 = config.read<string> ("node.name"); 46 if (config.exists("node.name")) nodeName = config.read<string> ("node.name"); 48 47 49 48 // configure ariba module 50 49 if (config.exists("ariba.ip.addr")) ariba->setProperty("ip.addr", 51 config.read<string> 50 config.read<string>("ariba.ip.addr")); 52 51 if (config.exists("ariba.tcp.port")) ariba->setProperty("tcp.port", 53 config.read<string> 52 config.read<string>("ariba.tcp.port")); 54 53 if (config.exists("ariba.udp.port")) ariba->setProperty("udp.port", 55 config.read<string> 54 config.read<string>("ariba.udp.port")); 56 55 if (config.exists("ariba.bootstrap.hints")) ariba->setProperty("bootstrap.hints", 57 config.read<string> 56 config.read<string>("ariba.bootstrap.hints")); 58 57 59 58 // start ariba module … … 71 70 72 71 // bind communication and node listener 73 node->bind( this ); 74 node->bind( this, PingPong::PINGPONG_ID); 75 72 node->bind( this ); /*NodeListener*/ 73 node->bind( this, PingPong::PINGPONG_ID); /*CommunicationListener*/ 74 76 75 // start the ping timer. if we are not 77 76 // the initiator this will happen in onJoinCompleted … … 79 78 80 79 // ping pong started up... 81 logging_info( "pingpong started up "); 80 logging_info( "pingpong starting up with" 81 << " [spovnetid " << node->getSpoVNetId().toString() << "]" 82 << " and [nodeid " << node->getNodeId().toString() << "]" ); 82 83 } 83 84 … … 91 92 92 93 // unbind communication and node listener 93 node->unbind( this ); 94 node->unbind( this, PingPong::PINGPONG_ID ); 94 node->unbind( this ); /*NodeListener*/ 95 node->unbind( this, PingPong::PINGPONG_ID ); /*CommunicationListener*/ 95 96 96 97 // leave spovnet … … 110 111 // node listener interface 111 112 void PingPong::onJoinCompleted( const SpoVNetID& vid ) { 112 logging_ info( "pingpong node join completed, spovnetid=" << vid.toString() );113 logging_error( "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX pingpong node join completed, spovnetid=" << vid.toString() ); 113 114 114 115 // start the timer to ping every second … … 117 118 118 119 void PingPong::onJoinFailed( const SpoVNetID& vid ) { 119 logging_error(" pingpong node join failed, spovnetid=" << vid.toString() ); 120 logging_error("pingpong node join failed, spovnetid=" << vid.toString() ); 121 } 122 123 void PingPong::onLeaveCompleted( const SpoVNetID& vid ){ 124 logging_info("pingpong node leave completed, spovnetid=" << vid.toString() ); 125 } 126 127 void PingPong::onLeaveFailed( const SpoVNetID& vid ){ 128 logging_error("pingpong node leave failed, spovnetid=" << vid.toString() ); 129 } 130 131 // timer event 132 void PingPong::eventFunction() { 133 134 // we ping all nodes that are known in the overlay structure 135 // this can be all nodes (OneHop) overlay or just some neighbors 136 // in case of a Chord or Kademlia structure 137 138 logging_info( "pinging overlay neighbors with ping id " << ++pingId ); 139 140 PingPongMessage pingmsg( pingId ); 141 142 //----------------------------------------------------------------------- 143 // Option 1: get all neighboring nodes and send the message to each 144 //----------------------------------------------------------------------- 145 vector<NodeID> nodes = node->getNeighborNodes(); 146 BOOST_FOREACH( NodeID nid, nodes ){ 147 node->sendMessage( pingmsg, nid, PingPong::PINGPONG_ID ); 148 } 149 150 //----------------------------------------------------------------------- 151 // Option 2: send a "broadcast message" that actually does the same thing 152 // internally, gets all neighboring nodes and sends the message 153 //----------------------------------------------------------------------- 154 // node->sendBroadcastMessage( pingmsg, PingPong::PINGPONG_ID ); 120 155 } 121 156 … … 127 162 void PingPong::onMessage(const DataMessage& msg, const NodeID& remote, const LinkID& lnk) { 128 163 129 PingPongMessage* pingmsg = msg.getMessage()-> decapsulate<PingPongMessage> ();164 PingPongMessage* pingmsg = msg.getMessage()->convert<PingPongMessage> (); 130 165 131 166 logging_info( "received ping message on link " << lnk.toString() … … 134 169 } 135 170 136 // timer event 137 void PingPong::eventFunction() { 138 139 // we ping all nodes that are known in the overlay structure 140 // this can be all nodes (OneHop) overlay or just some neighbors 141 // in case of a Chord or Kademlia structure 142 143 logging_info( "pinging overlay neighbors with ping id " << ++pingId ); 144 145 PingPongMessage pingmsg( pingId ); 146 node->sendBroadcastMessage( pingmsg, PingPong::PINGPONG_ID ); 171 void PingPong::onLinkUp(const LinkID& lnk, const NodeID& remote){ 172 logging_info( "received link-up event for link " << lnk.toString() 173 << " and node " << remote.toString() ); 174 } 175 176 void PingPong::onLinkDown(const LinkID& lnk, const NodeID& remote){ 177 logging_info( "received link-down event for link " << lnk.toString() 178 << " and node " << remote.toString() ); 179 } 180 181 void PingPong::onLinkChanged(const LinkID& lnk, const NodeID& remote){ 182 logging_info( "received link-changed event for link " << lnk.toString() 183 << " and node " << remote.toString() ); 184 } 185 186 void PingPong::onLinkFail(const LinkID& lnk, const NodeID& remote){ 187 logging_info( "received link-failed event for link " << lnk.toString() 188 << " and node " << remote.toString() ); 189 } 190 191 void PingPong::onLinkQoSChanged(const LinkID& lnk, const NodeID& remote, const LinkProperties& prop){ 192 logging_info( "received link-qos-changed event for link " << lnk.toString() 193 << " and node " << remote.toString() 194 << " with link properties " << prop.toString() ); 195 } 196 197 void PingPong::onMessageSent(seqnum_t seq_num, bool failed, const DataMessage& msg ){ 198 logging_info( "received message sent event for seqnum " << seq_num 199 << " with result " << failed ); 147 200 } 148 201 -
sample/pingpong/PingPong.h
r2483 r3037 37 37 virtual bool onLinkRequest(const NodeID& remote, const DataMessage& msg); 38 38 virtual void onMessage(const DataMessage& msg, const NodeID& remote, const LinkID& lnk= LinkID::UNSPECIFIED); 39 virtual void onLinkUp(const LinkID& lnk, const NodeID& remote); 40 virtual void onLinkDown(const LinkID& lnk, const NodeID& remote); 41 virtual void onLinkChanged(const LinkID& lnk, const NodeID& remote); 42 virtual void onLinkFail(const LinkID& lnk, const NodeID& remote); 43 virtual void onLinkQoSChanged(const LinkID& lnk, const NodeID& remote, const LinkProperties& prop); 44 virtual void onMessageSent(seqnum_t seq_num, bool failed, const DataMessage& msg = DataMessage::UNSPECIFIED); 39 45 40 46 // node listener interface 41 47 virtual void onJoinCompleted( const SpoVNetID& vid ); 42 48 virtual void onJoinFailed( const SpoVNetID& vid ); 49 virtual void onLeaveCompleted( const SpoVNetID& vid ); 50 virtual void onLeaveFailed( const SpoVNetID& vid ); 43 51 44 52 // startup wrapper interface … … 54 62 Node* node; 55 63 56 // flag, whet er this node initiates or just joins the spovnet64 // flag, whether this node initiates or just joins the spovnet 57 65 bool isInitiator; 58 66
Note:
See TracChangeset
for help on using the changeset viewer.