00001 #ifndef __PINGPONG_H_
00002 #define __PINGPONG_H_
00003
00004 #include "ariba/ariba.h"
00005 #include "PingPongMessage.h"
00006 #include "ariba/utility/system/StartupInterface.h"
00007 #include "ariba/utility/system/Timer.h"
00008
00009 #include <vector>
00010
00011 using namespace ariba;
00012 using ariba::utility::StartupInterface;
00013 using ariba::utility::Timer;
00014
00015 namespace ariba {
00016 namespace application {
00017 namespace pingpong {
00018
00019 using namespace std;
00020
00027 class PingPong: public NodeListener,
00028 public CommunicationListener,
00029 public StartupInterface,
00030 public Timer {
00031
00032 use_logging_h(PingPong);
00033
00034 public:
00035 PingPong();
00036 virtual ~PingPong();
00037
00038 protected:
00039
00040 virtual bool onLinkRequest(const NodeID& remote, const DataMessage& msg =
00041 DataMessage::UNSPECIFIED);
00042 virtual void onMessage(const DataMessage& msg, const NodeID& remote,
00043 const LinkID& lnk = LinkID::UNSPECIFIED);
00044 virtual void onLinkUp(const LinkID& lnk, const NodeID& remote);
00045 virtual void onLinkDown(const LinkID& lnk, const NodeID& remote);
00046 virtual void onLinkChanged(const LinkID& lnk, const NodeID& remote);
00047 virtual void onLinkFail(const LinkID& lnk, const NodeID& remote);
00048
00049
00050 virtual void onJoinCompleted(const SpoVNetID& vid);
00051 virtual void onJoinFailed(const SpoVNetID& vid);
00052 virtual void onLeaveCompleted(const SpoVNetID& vid);
00053 virtual void onLeaveFailed(const SpoVNetID& vid);
00054
00055
00056 virtual void startup();
00057 virtual void shutdown();
00058
00059
00060 virtual void eventFunction();
00061
00062 private:
00063
00064 AribaModule* ariba;
00065 Node* node;
00066 string name;
00067 int counter;
00068 vector<string> names;
00069
00070
00071 static ServiceID PINGPONG_SERVICEID;
00072
00073
00074 unsigned long pingId;
00075
00076 };
00077
00078
00079 ARIBA_SIMULATION_SERVICE(PingPong);
00080
00081 }}}
00082
00083 #endif // __PINGPONG_H_