Repository navigation
Expand file tree
/
Copy pathOnOffApplication.cc
More file actions
65 lines (50 loc) · 1.64 KB
/
Copy pathOnOffApplication.cc
File metadata and controls
65 lines (50 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <cstddef>
#include <cstdlib>
#include"OnOffApplication.h"
#include "Simulator.h"
#include "Node.h"
#include <iostream>
//#include "Application.cc"
//typedef std::multiset <EventBase*, event_less> EventSet_t;
using namespace std;
OnOffApplication::OnOffApplication(double rate0, double meanOffTime0, double meanOnTime0):Application()
{
rateWhenOn=rate0;
meanOffTime=meanOffTime0;
meanOnTime=meanOnTime0;
node = NULL;
//sim = NULL;
}
void OnOffApplication::SetPeerAddress(int peerAddr)
{
peerAddress=peerAddr;
}
/*************************************Event Handlers*******************************************/
void OnOffApplication::Handle(Node* node , int event_type)
{
if(event_type == 0)
Start(node);
else if(event_type == 1)
Stop(node);
}
void OnOffApplication::Start(Node* node)
{
cout << "Called start for " << node->GetAddr() << " " << Simulator::now << endl;
sim->Schedule(Simulator::now+meanOnTime, &OnOffApplication::Handle, (OnOffApplication*)(node->applications[0]), node,1);
int num_packets = meanOnTime*rateWhenOn/(PACKET_SIZE*8);
Time_t curr_time = 0;
for(int i=0; i<num_packets; i++)
{
//Create Events
curr_time = curr_time + PACKET_SIZE/rateWhenOn;
peerAddress = rand()%28;
while(peerAddress == node->GetAddr())
peerAddress = rand()%28;
sim->Schedule(curr_time, &Node::PacketGenerationComplete, node, node->GetAddr(), peerAddress, PACKET_SIZE);
}
}
void OnOffApplication::Stop(Node* node)
{
cout << "Called stop for " << node->GetAddr() << " " << Simulator::now << endl;
sim->Schedule(Simulator::now+meanOffTime, &OnOffApplication::Handle, (OnOffApplication*)(node->applications[0]), node,0);
}