X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=knode.py;h=30d19fb7ca369ee1154d6a7f90b94d65e2b5bfba;hb=7d427317cab577b54ab377100fdce5dc7d5366dc;hp=8a38462e46430bdb20ee96c02212c73312475334;hpb=517b039ed7c53375d72da94bc6c4a45fdbaa2d48;p=quix0rs-apt-p2p.git diff --git a/knode.py b/knode.py index 8a38462..30d19fb 100644 --- a/knode.py +++ b/knode.py @@ -1,27 +1,40 @@ from node import Node from twisted.internet.defer import Deferred from xmlrpcclient import XMLRPCClientFactory as factory -from const import reactor +from const import reactor, NULL_ID from xmlrpclib import Binary + class KNode(Node): + def makeResponse(self, df): + def _callback(args, d=df): + try: + l, sender = args + except: + d.callback(args) + else: + if self.id != NULL_ID and sender['id'].data != self.id: + d.errback() + else: + d.callback(args) + return _callback def ping(self, sender): df = Deferred() - f = factory('ping', (sender,), df.callback, df.errback) + f = factory('ping', (sender,), self.makeResponse(df), df.errback) reactor.connectTCP(self.host, self.port, f) return df def findNode(self, target, sender): df = Deferred() - f = factory('find_node', (target, sender), df.callback, df.errback) + f = factory('find_node', (Binary(target), sender), self.makeResponse(df), df.errback) reactor.connectTCP(self.host, self.port, f) return df def storeValue(self, key, value, sender): df = Deferred() - f = factory('store_value', (Binary(key), Binary(value), sender), df.callback, df.errback) + f = factory('store_value', (Binary(key), Binary(value), sender), self.makeResponse(df), df.errback) reactor.connectTCP(self.host, self.port, f) return df def findValue(self, key, sender): df = Deferred() - f = factory('find_value', (Binary(key), sender), df.callback, df.errback) + f = factory('find_value', (Binary(key), sender), self.makeResponse(df), df.errback) reactor.connectTCP(self.host, self.port, f) return df