-
Notifications
You must be signed in to change notification settings - Fork 2
/
packet.py
45 lines (32 loc) · 1.13 KB
/
packet.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
import uuid
import heapq
class Packet(object):
def __init__(self, timestamp, receiver, sender, packet_id = None):
self.packet_id = packet_id if packet_id is not None else uuid.uuid4()
self.timestamp = timestamp
self.receiver = receiver
self.sender = sender
self.elapsedTime = 0
def addLatency(self, elapsedTime):
self.elapsedTime += elapsedTime
def isReady(self, time):
return self.arriveTime() >= time
def arriveTime(self):
return self.timestamp + self.elapsedTime
def deepcopy(self):
p = Packet(self.timestamp, self.receiver, self.sender, self.packet_id)
p.addLatency(self.elapsedTime)
return p
# Packet priority queue, with packets ordered by arrival time
class PacketQueue(object):
def __init__(self):
self._packets = []
def push(self, packet):
toAdd = (packet.arriveTime(), packet)
heapq.heappush(self._packets, toAdd)
def pop(self):
return (heapq.heappop(self._packets))[1]
def next(self):
return self._packets[0][1]
def empty(self):
return len(self._packets) == 0