X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=apt_dht_Khashmir%2Fnode.py;h=6b3c433c607995008744494f9e69462a2c2bd414;hb=6df4eb289b9d83bd19dad8de3ca3de7283af7833;hp=fda6fbed6508179ef51753136e04aaddebb2197f;hpb=7dab2471d589ea439ccbfe794258863c2af858e9;p=quix0rs-apt-p2p.git diff --git a/apt_dht_Khashmir/node.py b/apt_dht_Khashmir/node.py index fda6fbe..6b3c433 100644 --- a/apt_dht_Khashmir/node.py +++ b/apt_dht_Khashmir/node.py @@ -1,47 +1,57 @@ ## Copyright 2002-2003 Andrew Loewenstern, All Rights Reserved # see LICENSE.txt for license information -from time import time +from datetime import datetime, MINYEAR from types import InstanceType +from twisted.trial import unittest + import khash +from util import compact # magic id to use before we know a peer's id -NULL_ID = 20 * '\0', +NULL_ID = 20 * '\0' class Node: """encapsulate contact info""" - def __init__(self): + def __init__(self, id, host = None, port = None): self.fails = 0 - self.lastSeen = 0 - self.id = self.host = self.port = '' - - def init(self, id, host, port): + self.lastSeen = datetime(MINYEAR, 1, 1) + + # Alternate method, init Node from dictionary + if isinstance(id, dict): + host = id['host'] + port = id['port'] + id = id['id'] + + assert isinstance(id, str) + assert isinstance(host, str) self.id = id self.num = khash.intify(id) self.host = host - self.port = port - self._senderDict = {'id': self.id, 'port' : self.port, 'host' : self.host} - return self - - def initWithDict(self, dict): - self._senderDict = dict - self.id = dict['id'] - self.num = khash.intify(self.id) - self.port = dict['port'] - self.host = dict['host'] - return self + self.port = int(port) + self.token = '' + self.num_values = 0 + self._contactInfo = None def updateLastSeen(self): - self.lastSeen = time() + self.lastSeen = datetime.now() self.fails = 0 + + def updateToken(self, token): + self.token = token + + def updateNumValues(self, num_values): + self.num_values = num_values def msgFailed(self): self.fails = self.fails + 1 return self.fails - def senderDict(self): - return self._senderDict + def contactInfo(self): + if self._contactInfo is None: + self._contactInfo = compact(self.id, self.host, self.port) + return self._contactInfo def __repr__(self): return `(self.id, self.host, self.port)` @@ -73,13 +83,11 @@ class Node: return self.num != a -import unittest - class TestNode(unittest.TestCase): def setUp(self): - self.node = Node().init(khash.newID(), 'localhost', 2002) + self.node = Node(khash.newID(), '127.0.0.1', 2002) def testUpdateLastSeen(self): t = self.node.lastSeen self.node.updateLastSeen() - assert t < self.node.lastSeen + self.failUnless(t < self.node.lastSeen) \ No newline at end of file