-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathSinkManager.cpp
executable file
·62 lines (51 loc) · 1.68 KB
/
SinkManager.cpp
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
//
// SinkManager.cpp
// AggregationNS3
//
// Created by Alper Sinan Akyurek on 8/12/16.
// Copyright © 2016 Alper Sinan Akyurek. All rights reserved.
//
#include "SinkManager.hpp"
#include "StatisticsManager.hpp"
NS_LOG_COMPONENT_DEFINE("SinkManager");
NS_OBJECT_ENSURE_REGISTERED(SinkManager);
ns3::TypeId
SinkManager::GetTypeId( void )
{
static ns3::TypeId tid = ns3::TypeId( "SinkManager" )
.SetParent<ns3::Object> ()
.AddConstructor<SinkManager> ()
;
return ( tid );
}
void
SinkManager::SetSinkAddress( void )
{
this->m_receivingSocket = ns3::Socket::CreateSocket( this->m_installedNode, ns3::TypeId::LookupByName( "ns3::UdpSocketFactory" ) );
TSocketAddress localSocketAddress = TSocketAddress( ns3::Ipv4Address::GetAny(), portNumber );
this->m_receivingSocket->Bind( localSocketAddress );
this->m_receivingSocket->SetRecvCallback( ns3::MakeCallback( &SinkManager::ReceivePacket, this ) );
}
void
SinkManager::InstallOnNode( const TNodePtr & node )
{
this->m_installedNode = node;
this->SetSinkAddress();
}
void
SinkManager::ReceivePacket( TSocketPtr socket )
{
ns3::Ptr<ns3::Packet> packet = socket->Recv();
unsigned int size = packet->GetSize();
unsigned char* buffer = new unsigned char[size];
packet->CopyData( ( uint8_t* )buffer, size );
MeasurementQueue allMeasurements;
allMeasurements.ReadFromBuffer( buffer, size );
delete[] buffer;
StatisticsManager::GetStatisticsManager().PacketReceived();
for ( auto i = allMeasurements.Begin(); i != allMeasurements.End(); ++i )
{
( *i )->MarkReceived();
StatisticsManager::GetStatisticsManager().MeasurementReceived( *i );
}
}