This repository was archived by the owner on Sep 19, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOGMProcessor.py
More file actions
106 lines (87 loc) · 3.77 KB
/
Copy pathOGMProcessor.py
File metadata and controls
106 lines (87 loc) · 3.77 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#***************************************
# Filename: OGMProcessor.py
#
# Description:
# This module processes all of the sent and
# recieved OGM packets.
#
#***************************************
#Import Constants
from Constants import *
#Lib imports:
from threading import Thread
import time, random, string
class OGMProcessor(Thread):
def __init__(self, ViewControllerPlug, DataStoragePlug, PacketManagerPlug):
Thread.__init__(self)
self.ViewControllerPlug = ViewControllerPlug
self.DataStoragePlug = DataStoragePlug
self.PacketManagerPlug = PacketManagerPlug
def run(self):
if verbose: print "OGMProcessor Start"
Exit = False
theNodeisOn = False
myAddress = None
wallTime = time.clock()
sequenceNumber = sequenceNumberStart
alreadyRepeated = dict()
while(not Exit):
#check the view plug for messages
if not self.ViewControllerPlug.isEmpty(__name__):
viewControllerMessage = self.ViewControllerPlug.get(__name__)
if viewControllerMessage != None:
if viewControllerMessage == ViewExit:
Exit = True
#check the data plug for messages
#check the packetmanager plug for messages
if not self.PacketManagerPlug.isEmpty(__name__):
packetManagerMessage = self.PacketManagerPlug.get(__name__)
if packetManagerMessage != None:
if packetManagerMessage == NodeOn:
theNodeisOn = True
if verbose: print "OGMProcessor: NodeOn"
elif packetManagerMessage == NodeOff:
theNodeisOn = False
if verbose: print "OGMProcessor: NodeOff"
elif isAddressMessage(packetManagerMessage):
myAddress = packetManagerMessage[1]
if verbose: print "OGMProcessor: MY address is: " + myAddress
elif isOGMMessage(packetManagerMessage):
header = packetManagerMessage[1]
payload = packetManagerMessage[2]
sender = header[0]
self.DataStoragePlug.put((OGMMessage, header, payload), __name__)
listFromPayload = payload.split("/")
ttl_ofpacket = listFromPayload[0]
originator = listFromPayload[1]
sequenceNumberOfPacket = listFromPayload[2]
if originator != myAddress:
if ttl_ofpacket > 0:
if alreadyRepeated.has_key(originator):
if verbose: print str(alreadyRepeated)
if verbose: print "alreadyRepeated[originator]: " + str(alreadyRepeated[originator])
if verbose: print " sequenceNumberOfPacket: " + str(sequenceNumberOfPacket)
if alreadyRepeated[originator] < sequenceNumberOfPacket:
alreadyRepeated[originator] = sequenceNumberOfPacket
listFromPayload[0] = str(int(listFromPayload[0]) -1)
returnedPayload = string.join(listFromPayload, "/")
self.PacketManagerPlug.put((OGMMessage, myAddress, BROADCAST, returnedPayload), __name__)
if verbose: print "packetManagerPlug.put:" + returnedPayload
else:
alreadyRepeated[originator] = sequenceNumberOfPacket
listFromPayload[0] = str(int(listFromPayload[0]) -1)
returnedPayload = string.join(listFromPayload, "/")
self.PacketManagerPlug.put((OGMMessage, myAddress, BROADCAST, returnedPayload), __name__)
#Alright, now we do some work:
if theNodeisOn and (myAddress != None):
#Check the current time:
currentTime = time.clock()
#Is the old time + timeBetweenOGM > currentTime?
if (currentTime - wallTime) > timeBetweenOGM:
#Sleep for an extra random amount of time
time.sleep(random.random() * maxRandomTimeBetweenOGM)
wallTime = time.clock()
data = str(ttl_value) + "/" + myAddress + "/" + str(sequenceNumber)
self.PacketManagerPlug.put((OGMMessage, myAddress, BROADCAST, data), __name__)
sequenceNumber = sequenceNumber + 1
if verbose: print "OGMProcessor Exit"