-
Notifications
You must be signed in to change notification settings - Fork 0
/
Receiver.py
executable file
·51 lines (42 loc) · 2.27 KB
/
Receiver.py
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
# .------------------------------------------------------------------------------.
# | |
# | R E C E I V E R |
# | |
# '------------------------------------------------------------------------------'
from copy import *
import operator
class Receiver(object):
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# P U B L I C F U N C T I O N S
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def __init__(self):
# Data
self.receivedPackets = []
self.filteredPackets = []
def getFilteredData(self, receivedPackets=[]):
if isinstance( receivedPackets, list ):
self.receivedPackets = receivedPackets
self.filterPackets()
self.setTime()
return self.filteredPackets
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# P R I V A T E F U N C T I O N S
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def filterPackets(self):
# Remove packets received at same time and out of order packets
self.filteredPackets = []
self.receivedPackets.sort( key = operator.attrgetter('timeReceived') )
self.filteredPackets.append(deepcopy(self.receivedPackets[0]))
lastPacketReceived = self.receivedPackets[0]
for packet in self.receivedPackets:
if packet.timeReceived == lastPacketReceived.timeReceived:
if packet.sequenceNumber > lastPacketReceived.sequenceNumber:
self.filteredPackets[-1] = deepcopy(packet)
lastPacketReceived = packet
else:
if packet.sequenceNumber > lastPacketReceived.sequenceNumber:
self.filteredPackets.append(deepcopy(packet))
lastPacketReceived = packet
def setTime(self):
for packet in self.filteredPackets:
packet.predictionSample.sample.time = packet.timeReceived