An Overlay-based
Virtual Network Substrate
SpoVNet

source: sample/pingpong/PingPong.cpp @ 2410

Last change on this file since 2410 was 2410, checked in by mies, 12 years ago

adapted ping pong example

File size: 3.4 KB
Line 
1
2#include "PingPong.h"
3#include "ariba/utility/configuration/Configuration.h"
4
5using ariba::utility::Configuration;
6using namespace ariba;
7
8namespace ariba {
9namespace application {
10namespace pingpong {
11
12// logging
13use_logging_cpp( PingPong);
14
15// the service id of the ping pong service
16ServiceID PingPong::PINGPONG_ID = ServiceID(111);
17
18// construction
19PingPong::PingPong() : pingId( 0 ) {
20}
21
22// destruction
23PingPong::~PingPong() {
24}
25
26// implementation of the startup interface
27void PingPong::startup() {
28
29        // create ariba module
30        logging_info("Creating ariba underlay module ... ");
31        ariba = new AribaModule();
32
33        logging_info("Starting up PingPong service ... ");
34
35        // --- get config ---
36        Configuration& config = Configuration::instance();
37
38        // generate spovnet name
39        Name spovnetName("pingpong");
40
41        // get initiator flag
42        this->isInitiator = Configuration::instance().read<bool> ("node.initiator");
43
44        // get node name
45        Name nodeName = Name::UNSPECIFIED;
46        if (config.exists("node.name")) nodeName
47                        = config.read<string> ("node.name");
48
49        // configure ariba module
50        if (config.exists("ariba.ip.addr")) ariba->setProperty("ip.addr",
51                        config.read<string> ("ariba.ip.addr"));
52        if (config.exists("ariba.tcp.port")) ariba->setProperty("tcp.port",
53                        config.read<string> ("ariba.tcp.port"));
54        if (config.exists("ariba.udp.port")) ariba->setProperty("udp.port",
55                        config.read<string> ("ariba.udp.port"));
56        if (config.exists("ariba.bootstrap.hints")) ariba->setProperty("bootstrap.hints",
57                        config.read<string> ("ariba.bootstrap.hints"));
58
59        // start ariba module
60        ariba->start();
61
62        // create node and join
63        node = new Node(*ariba, nodeName);
64
65        // start node module
66        node->start();
67
68        if (!isInitiator) {
69                node->join(spovnetName);
70        } else {
71                node->initiate(spovnetName);
72        }
73
74        // bind communication and node listener
75        node->bind(this);
76        node->bind(this, PingPong::PINGPONG_ID);
77
78        // ping pong started up...
79        logging_info("PingPong started up");
80}
81
82// implementation of the startup interface
83void PingPong::shutdown() {
84        logging_info("PingPong service starting shutdown sequence ...");
85
86        // stop timer
87        Timer::stop();
88
89        // leave spovnet
90        node->leave();
91
92        // unbind listeners
93        node->unbind( this );
94        node->unbind( this, PingPong::PINGPONG_ID );
95
96        logging_info("PingPong service shut down!");
97}
98
99// node listener interface
100void PingPong::onJoinCompleted( const SpoVNetID& vid ) {
101        logging_info("PingPong node join completed, spovnetid=" << vid.toString() );
102}
103
104void PingPong::onJoinFailed( const SpoVNetID& vid ) {
105        logging_info("PingPong node join failed, spovnetid=" << vid.toString() );
106}
107
108// communication listener
109bool PingPong::onLinkRequest(const NodeID& remote, Message* msg) {
110        return false;
111}
112
113void PingPong::onMessage(Message* msg, const NodeID& remote, const LinkID& lnk =
114                LinkID::UNSPECIFIED) {
115        PingPongMessage* incoming = msg->decapsulate<PingPongMessage> ();
116
117        logging_info("received ping message on link " << lnk.toString()
118                        << " from node with id " << (int) incoming->getid());
119}
120
121// timer event
122void PingPong::eventFunction() {
123
124        logging_info("pinging our remote nodes");
125//      RemoteNodes::iterator i = remoteNodes.begin();
126//      RemoteNodes::iterator iend = remoteNodes.end();
127//
128//      pingid++;
129//
130//      for (; i != iend; i++) {
131//              logging_info("     -> pinging " << i->first);
132//
133//              PingPongMessage pingmsg(pingid);
134//              overlay->sendMessage(&pingmsg, i->second);
135//      }
136}
137
138}}} // namespace ariba, application, pingpong
Note: See TracBrowser for help on using the repository browser.