reverted changes

This commit is contained in:
Roel 2014-04-24 16:23:50 +02:00
parent fa67aba96e
commit 7a6d139280

87
main.py
View File

@ -9,7 +9,7 @@ class Meshenger:
#own_ip = "0.0.0.0" #own_ip = "0.0.0.0"
msg_dir = os.path.relpath('msg/') msg_dir = os.path.relpath('msg/')
exitapp = False #to kill all threads on exitapp = False #to kill all threads on
index_last_update = str(int(time.time())) index_last_update = str(time.time())
def __init__(self): def __init__(self):
@ -50,12 +50,14 @@ class Meshenger:
for device in self.devices: for device in self.devices:
nodepath = self.ip_to_hash(device) #make a folder for the node (nodes/'hash'/) nodepath = self.ip_to_hash(device) #make a folder for the node (nodes/'hash'/)
nodeupdatepath = os.path.join(nodepath, 'lastupdate') #contains the path to the update timestamp of the node (nodes/'hash'/lastupdate) nodeupdatepath = os.path.join(self.ip_to_hash(device), 'lastupdate')
print 'Checking age of foreign node index' print 'Checking age of foreign node index'
print self.devices[device]
foreign_node_update = open(nodeupdatepath).read()
print foreign_node_update
if self.devices[device][2] > open(nodeupdatepath).read(): if self.devices[device] > foreign_node_update:
print 'Foreign node"s index is newer, proceed to download index' print 'Foreign node"s index is newer, proceed to download index'
self.get_index(device, nodepath) self.get_index(device, nodepath)
print 'downloading messages' print 'downloading messages'
@ -65,19 +67,19 @@ class Meshenger:
time.sleep(5) #free process or ctrl+c time.sleep(5) #free process or ctrl+c
def node_timestamp(self): def node_timestamp(self, ip):
updatepath = os.path.join(path, 'lastupdate') updatepath = os.path.join(self.ip_to_hash(ip), 'lastupdate')
with open(updatepath, 'wb') as lastupdate: with open(updatepath, 'wb') as lastupdate:
lastupdate.write(self.devices[ip][2]) lastupdate.write(self.devices[ip])
return updatepath #return updatepath
def announce(self): def announce(self):
""" """
Announce the node's existance to other nodes Announce the node's existance to other nodes
""" """
print 'Announcing' print 'Announcing'
while not self.exitapp: while not self.exitapp:
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
@ -87,8 +89,8 @@ class Meshenger:
def discover(self): def discover(self):
""" """
Discover other devices by listening to the Meshenger announce port Discover other devices by listening to the Meshenger announce port
""" """
print 'Discovering' print 'Discovering'
bufferSize = 1024 # whatever you need bufferSize = 1024 # whatever you need
@ -98,52 +100,31 @@ class Meshenger:
s.setblocking(0) s.setblocking(0)
while not self.exitapp: while not self.exitapp:
result = select.select([s],[],[])[0][0].recvfrom(bufferSize) result = select.select([s],[],[])[0][0].recvfrom(bufferSize)
foreign_node_ip = result[1][0]
if foreign_node_ip not in self.devices and foreign_node_ip != self.own_ip: if result[1][0] not in self.devices and result[1][0] != self.own_ip:
print 'voor het eerst toegevoegd' #loop for first time
timestamp = result[0] #get the timestamp that foreign node announced self.devices[result[1][0]] = result[0]
oldtimestamp = timestamp node_timestamp(result[1][0])
localtimestamp = str(int(time.time()))
self.devices[foreign_node_ip] = (timestamp, oldtimestamp, localtimestamp) #add everything to dictionary
with open(os.path.join(self.ip_to_hash(foreign_node_ip), 'lastupdate'),'wb') as lastupdate:
lastupdate.write(localtimestamp) #convert what node announced to local time and save for node in nodes/hash/lastupdate
if foreign_node_ip in self.devices and foreign_node_ip != self.own_ip:
timestamp = result[0] # we already know the node, so we update timestamp (might now give difference between old and new timestamp)
oldtimestamp = self.devices[foreign_node_ip][1]
self.devices[foreign_node_ip] = (timestamp, oldtimestamp, localtimestamp)
print 'timestamp update'
#print self.devices[foreign_node_ip]
if timestamp != oldtimestamp:
localtimestamp = str(int(time.time()))
self.devices[foreign_node_ip] = (timestamp, timestamp, localtimestamp)
with open(os.path.join(self.ip_to_hash(foreign_node_ip), 'lastupdate'),'wb') as lastupdate:
lastupdate.write(localtimestamp)
print 'local tijd aangepast'
#print self.devices[foreign_node_ip]
if result[1][0] in self.devices and result[1][0] != self.own_ip:
self.devices[result[1][0]] = result[0]
#self.devices.append(result[1][0]) #self.devices.append(result[1][0])
time.sleep(1) time.sleep(1)
def serve(self): def serve(self):
""" """
Initialize the server Initialize the server
""" """
print 'Serving' print 'Serving'
import meshenger_serve import meshenger_serve
meshenger_serve.main() meshenger_serve.main()
def build_index(self): def build_index(self):
""" """
Make an index file of all the messages present on the node. Make an index file of all the messages present on the node.
Save the time of the last update. Save the time of the last update.
""" """
if not os.path.exists('index'): if not os.path.exists('index'):
with open('index','wb') as index: with open('index','wb') as index:
index.write('') index.write('')
@ -157,7 +138,6 @@ class Meshenger:
for message in os.listdir(self.msg_dir): for message in os.listdir(self.msg_dir):
index.write(message) index.write(message)
index.write('\n') index.write('\n')
self.index_last_update = str(int(time.time())) self.index_last_update = str(int(time.time()))
with open('index_last_update', 'wb') as indexupdate: ### misschien is dit overbodig with open('index_last_update', 'wb') as indexupdate: ### misschien is dit overbodig
@ -167,16 +147,16 @@ class Meshenger:
def get_index(self,ip, path): def get_index(self,ip, path):
""" """
Download the indices from other nodes. Download the indices from other nodes.
""" """
os.system('wget http://['+ip+'%adhoc0]:'+self.serve_port+'/index -O '+os.path.join(path,'index')) os.system('wget http://['+ip+'%adhoc0]:'+self.serve_port+'/index -O '+os.path.join(path,'index'))
def get_messages(self, ip, path): def get_messages(self, ip, path):
""" """
Get new messages from other node based on it's index file Get new messages from other node based on it's index file
""" """
try: try:
with open(os.path.join(path,'index')) as index: with open(os.path.join(path,'index')) as index:
index = index.read().split('\n') index = index.read().split('\n')
@ -190,8 +170,8 @@ class Meshenger:
def ip_to_hash(self, ip): def ip_to_hash(self, ip):
""" """
Convert a node's ip into a hash and make a directory to store it's files Convert a node's ip into a hash and make a directory to store it's files
""" """
import hashlib import hashlib
hasj = hashlib.md5(ip).hexdigest() hasj = hashlib.md5(ip).hexdigest()
nodepath = os.path.join(os.path.abspath('nodes/'), hasj) nodepath = os.path.join(os.path.abspath('nodes/'), hasj)
@ -209,8 +189,8 @@ class Meshenger:
def get_ip_adress(self): def get_ip_adress(self):
""" """
Hack to adhoc0's inet6 adress Hack to adhoc0's inet6 adress
""" """
if not os.path.isfile('interfaceip6adress'): if not os.path.isfile('interfaceip6adress'):
os.system('ifconfig -a adhoc0 | grep inet6 > /root/meshenger/interfaceip6adress') os.system('ifconfig -a adhoc0 | grep inet6 > /root/meshenger/interfaceip6adress')
with open('interfaceip6adress', 'r') as a: with open('interfaceip6adress', 'r') as a:
@ -225,3 +205,4 @@ if __name__ == "__main__":
except (KeyboardInterrupt, SystemExit): except (KeyboardInterrupt, SystemExit):
exitapp = True exitapp = True
raise raise