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

📄 knode.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.from node import Nodefrom BitTorrent.defer import Deferredfrom const import NULL_IDfrom krpc import KRPCProtocolErrorclass IDChecker:    def __init__(self, id):        self.id = idclass KNodeBase(Node):    __slots__= ('cfa', 'table')    def __init__(self, cfa):        Node.__init__(self)        self.cfa = cfa    def conn(self):        return self.cfa((self.host, self.port))        def checkSender(self, dict):        try:            senderid = dict['rsp']['id']        except KeyError:            raise KRPCProtocolError, "No peer id in response."        else:            if self.id != NULL_ID and senderid != self.id:                self.table.table.invalidateNode(self)            else:                if self.id == NULL_ID:                    self.id = senderid                self.table.insertNode(self, contacted=1)        return dict    def errBack(self, err):        self.table.table.nodeFailed(self)        return err[0]            def ping(self, id):        df = self.conn().sendRequest('ping', {"id":id})        self.conn().pinging = True        def endping(x):            self.conn().pinging = False            return x        df.addCallbacks(endping, endping)        df.addCallbacks(self.checkSender, self.errBack)        return df    def findNode(self, target, id):        df = self.conn().sendRequest('find_node', {"target" : target, "id": id})        df.addErrback(self.errBack)        df.addCallback(self.checkSender)        return df    def inPing(self):        return self.conn().pinging    class KNodeRead(KNodeBase):    def findValue(self, key, id):        df =  self.conn().sendRequest('find_value', {"key" : key, "id" : id})        df.addErrback(self.errBack)        df.addCallback(self.checkSender)        return dfclass KNodeWrite(KNodeRead):    def storeValue(self, key, value, id):        df = self.conn().sendRequest('store_value', {"key" : key, "value" : value, "id": id})        df.addErrback(self.errBack)        df.addCallback(self.checkSender)        return df    def storeValues(self, key, value, id):        df = self.conn().sendRequest('store_values', {"key" : key, "values" : value, "id": id})        df.addErrback(self.errBack)        df.addCallback(self.checkSender)        return df

⌨️ 快捷键说明

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