X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=node.py;h=22a4dd9b12b69acfe936021bcfb9b459e309f420;hb=3b636396a5d558126f9d18ff89b3e4d5bae06079;hp=4d7a977a8ed79947ca1a9d48ea00e184688ec52e;hpb=6533b37c36b8437d4d1fc43714c0cdbc1767eca7;p=quix0rs-apt-p2p.git diff --git a/node.py b/node.py index 4d7a977..22a4dd9 100644 --- a/node.py +++ b/node.py @@ -4,76 +4,76 @@ from types import * from xmlrpclib import Binary class Node: - """encapsulate contact info""" - - def __init__(self): - self.fails = 0 - self.lastSeen = time.time() - - def init(self, id, host, port): - self.id = id - self.int = hash.intify(id) - self.host = host - self.port = port - self._senderDict = {'id': Binary(self.id), 'port' : self.port, 'host' : self.host} - return self + """encapsulate contact info""" + def __init__(self): + self.fails = 0 + self.lastSeen = 0 + self.id = self.host = self.port = '' + + def init(self, id, host, port): + self.id = id + self.num = hash.intify(id) + self.host = host + self.port = port + self._senderDict = {'id': self.id.encode('base64'), 'port' : self.port, 'host' : self.host} + return self - def initWithDict(self, dict): - self._senderDict = dict - self.id = dict['id'].data - self.int = hash.intify(self.id) - self.port = dict['port'] - self.host = dict['host'] - return self + def initWithDict(self, dict): + self._senderDict = dict + self.id = dict['id'].decode('base64') + self.num = hash.intify(self.id) + self.port = dict['port'] + self.host = dict['host'] + return self - def updateLastSeen(self): - self.lastSeen = time.time() - self.fails = 0 + def updateLastSeen(self): + self.lastSeen = time.time() + self.fails = 0 - def msgFailed(self): - self.fails = self.fails + 1 - return self.fails + def msgFailed(self): + self.fails = self.fails + 1 + return self.fails - def senderDict(self): - return self._senderDict + def senderDict(self): + return self._senderDict - def __repr__(self): - return `(self.id, self.host, self.port)` + def __repr__(self): + return `(self.id, self.host, self.port)` ## these comparators let us bisect/index a list full of nodes with either a node or an int/long - def __lt__(self, a): - if type(a) == InstanceType: - a = a.int - return self.int < a - def __le__(self, a): - if type(a) == InstanceType: - a = a.int - return self.int <= a - def __gt__(self, a): - if type(a) == InstanceType: - a = a.int - return self.int > a - def __ge__(self, a): - if type(a) == InstanceType: - a = a.int - return self.int >= a - def __eq__(self, a): - if type(a) == InstanceType: - a = a.int - return self.int == a - def __ne__(self, a): - if type(a) == InstanceType: - a = a.int - return self.int != a + def __lt__(self, a): + if type(a) == InstanceType: + a = a.num + return self.num < a + def __le__(self, a): + if type(a) == InstanceType: + a = a.num + return self.num <= a + def __gt__(self, a): + if type(a) == InstanceType: + a = a.num + return self.num > a + def __ge__(self, a): + if type(a) == InstanceType: + a = a.num + return self.num >= a + def __eq__(self, a): + if type(a) == InstanceType: + a = a.num + return self.num == a + def __ne__(self, a): + if type(a) == InstanceType: + a = a.num + return self.num != a import unittest class TestNode(unittest.TestCase): - def setUp(self): - self.node = Node().init(hash.newID(), 'localhost', 2002) - def testUpdateLastSeen(self): - t = self.node.lastSeen - self.node.updateLastSeen() - assert t < self.node.lastSeen + def setUp(self): + self.node = Node().init(hash.newID(), 'localhost', 2002) + def testUpdateLastSeen(self): + t = self.node.lastSeen + self.node.updateLastSeen() + assert t < self.node.lastSeen \ No newline at end of file