update20140630
This commit is contained in:
@@ -0,0 +1,217 @@
|
||||
/*
|
||||
* File: ApplicationLevelMulticastTestApplication.cc
|
||||
* Author: jgaebler
|
||||
*
|
||||
* Created on February 17, 2012, 5:02 PM
|
||||
*/
|
||||
|
||||
#include "ApplicationLevelMulticastTestApplication.h"
|
||||
|
||||
#include "../Moversight.h"
|
||||
#include "../Dispatcher.h"
|
||||
#include "../app/PeerDescription.h"
|
||||
#include "../simutils/OmnetppIniUtils.h"
|
||||
#include "StreamMessage.h"
|
||||
#include "../simutils/statistics/VectorStatistic.h"
|
||||
|
||||
#include "ms/events/GroupClosedEvent.h"
|
||||
#include "ms/events/GroupCreatedEvent.h"
|
||||
#include "ms/events/JoinRequestEvent.h"
|
||||
|
||||
#undef DEBUG
|
||||
#define DEBUG(msg) if (module.isPrintDebugAPP()) \
|
||||
MOV_DEBUG << "APP@"<<(dis->getLocalState()==DISJOINED?"TA_":"");\
|
||||
if(dis->getLocalState()==DISJOINED){MOV_DEBUG << module.getLocalAddress();}\
|
||||
else{MOV_DEBUG<< dis->getMembershipService().getLocalID();}MOV_DEBUG<<" "<<msg<<std::endl;
|
||||
|
||||
namespace ubeeme {
|
||||
namespace moversight {
|
||||
|
||||
/**
|
||||
* @brief Constructor
|
||||
* @param m A reference to the moversight instance
|
||||
*/
|
||||
ApplicationLevelMulticastTestApplication::ApplicationLevelMulticastTestApplication(Moversight & m) : Application(m, "ApplicationLevelMulticastTestApplication") {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
ApplicationLevelMulticastTestApplication::~ApplicationLevelMulticastTestApplication() {
|
||||
}
|
||||
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::initialise() {
|
||||
dis->subscribe<GroupClosedEvent>(this);
|
||||
dis->subscribe<GroupCreatedEvent>(this);
|
||||
dis->subscribe<JoinRequestEvent>(this);
|
||||
}
|
||||
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::finalise() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Invites a peer to a the moversight group.
|
||||
* @param ta The transport address of the peer to invite.
|
||||
*/
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::invitePeer(TransportAddress & ta) {
|
||||
|
||||
std::stringstream buf;
|
||||
buf << "invitePeer - invite peer at address " << ta;
|
||||
DEBUG(buf.str().c_str());
|
||||
|
||||
PeerDescription pDesc;
|
||||
dis->invitePeer(ta, pDesc);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sends dummy data to the group to simulate application traffic.
|
||||
*/
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::sendData() {
|
||||
|
||||
DEBUG("sendData - stream dummy data to the group");
|
||||
StreamMessage data;
|
||||
dis->sendMessage(data);
|
||||
|
||||
VectorStatistic vs("sendStream");
|
||||
vs.record(GenericTime::currentTime());
|
||||
}//End
|
||||
|
||||
/**
|
||||
* @brief Starts the given test case.
|
||||
* @param i The number of the test case to start.
|
||||
*/
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::startTestCase(unsigned int i) {
|
||||
|
||||
switch (i) {
|
||||
case 0:
|
||||
testCase00();
|
||||
break;
|
||||
case 1:
|
||||
testCase01();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}//End switch
|
||||
}//End startTestCase
|
||||
|
||||
/**
|
||||
* @brief Executes test case 00
|
||||
*/
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::testCase00() {
|
||||
|
||||
int moduleIndex = module.getLocalAddress().getHostAddress().get4().getDByte(3);
|
||||
|
||||
if (initApp) {
|
||||
|
||||
candidates = OmnetppIniUtils::getDestinationAddressesFromOmnetppIni(module);
|
||||
|
||||
waitCounter = 5;
|
||||
initApp = false;
|
||||
if (moduleIndex == 1) {
|
||||
module.scheduleTestCase(45);
|
||||
}//End if
|
||||
}//End if
|
||||
|
||||
//------------------------------------------------------------------
|
||||
//run the app
|
||||
//------------------------------------------------------------------
|
||||
if (moduleIndex == 1) { // starts counting at 1
|
||||
|
||||
//we have more candidates?
|
||||
if (candidatesIndex < candidates.size()) {
|
||||
if (waitCounter > 0) {
|
||||
waitCounter--;
|
||||
}
|
||||
else {
|
||||
invitePeer(candidates.get(candidatesIndex++));
|
||||
}
|
||||
}
|
||||
else {
|
||||
sendData();
|
||||
}
|
||||
|
||||
module.scheduleTestCase(45);
|
||||
|
||||
}//End if
|
||||
}//End testCase00
|
||||
|
||||
/**
|
||||
* @brief Executes test case 01.
|
||||
*/
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::testCase01() {
|
||||
std::cerr << "TC01 not implemented yet" << endl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Called, have the local peer received a stream data message.
|
||||
* @param data The received message.
|
||||
* @param sender The sender of the message.
|
||||
*/
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::receiveStreamMessage(const StreamMessage & data, const PeerID sender) {
|
||||
|
||||
std::stringstream buf;
|
||||
buf << "receiveStreamMessage - receive stream message from peer ID " << sender;
|
||||
DEBUG(buf.str().c_str());
|
||||
|
||||
VectorStatistic vs("receiveStream");
|
||||
vs.record(GenericTime::currentTime());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Handle an incoming JoinRequestEvent.
|
||||
* @param e The event.
|
||||
*/
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::handleEvent(const JoinRequestEvent & e) {
|
||||
|
||||
DEBUG("invitationReceived - invitation received");
|
||||
std::stringstream buf;
|
||||
buf << "invitationReceived - invitationID: " << e.getInvitation().getInvitationID() << " inviterID: " << e.getInvitation().getInviterID();
|
||||
DEBUG(buf.str().c_str());
|
||||
|
||||
// if(module.localAddress() == 1 || module.localAddress() == 3 ){
|
||||
//
|
||||
// MOV_DEBUG << "APP_invitationReceived@TA_" << module.localAddress() << " reject invitation" << endl;
|
||||
// gc->rejectInvitaion(invitation, "peer placing strategy not supported");
|
||||
//
|
||||
// }//End if
|
||||
// else{
|
||||
|
||||
DEBUG("invitationReceived - accept invitation");
|
||||
PeerDescription pDesc;
|
||||
PeerResources resources;
|
||||
|
||||
dis->acceptInvitation(e.getInvitation(), "accept invitation", pDesc, resources);
|
||||
|
||||
// }//End else
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Handle an incoming GroupCreatedEvent.
|
||||
* @param e The event
|
||||
*/
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::handleEvent(const GroupCreatedEvent & e) {
|
||||
DEBUG("group created");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Handle an incoming GroupClosedEvent.
|
||||
* @param e The event.
|
||||
*/
|
||||
void
|
||||
ApplicationLevelMulticastTestApplication::handleEvent(const GroupClosedEvent & e) {
|
||||
DEBUG("group closed");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user