⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 node.py

📁 bittorrent source by python. please enjoy
💻 PY
字号:
# The contents of this file are subject to the BitTorrent Open Source License# Version 1.1 (the License).  You may not copy or use this file, in either# source code or executable form, except in compliance with the License.  You# may obtain a copy of the License at http://www.bittorrent.com/license/.## Software distributed under the License is distributed on an AS IS basis,# WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the License# for the specific language governing rights and limitations under the# License.import khashfrom BitTorrent.platform import bttime as timefrom types import *class Node(object):    """encapsulate contact info"""    __slots__ = ('fails','lastSeen','invalid','id','host','port','age')    def __init__(self):        self.fails = 0        self.lastSeen = 0        self.invalid = True        self.id = self.host = self.port = ''        self.age = time()            def init(self, id, host, port):        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']        self.age = dict.get('age', self.age)        return self        def updateLastSeen(self):        self.lastSeen = time()        self.fails = 0        self.invalid = False            def msgFailed(self):        self.fails = self.fails + 1        return self.fails        def senderDict(self):        return self._senderDict    def __hash__(self):        return self.id.__hash__()        def __repr__(self):        return ">node <%s> %s<" % (self.id.encode('base64')[:4], (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.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 != aimport unittestclass TestNode(unittest.TestCase):    def setUp(self):        self.node = Node().init(khash.newID(), 'localhost', 2002)    def testUpdateLastSeen(self):        t = self.node.lastSeen        self.node.updateLastSeen()        assert t < self.node.lastSeen    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -