]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - knode.py
30d19fb7ca369ee1154d6a7f90b94d65e2b5bfba
[quix0rs-apt-p2p.git] / knode.py
1 from node import Node
2 from twisted.internet.defer import Deferred
3 from xmlrpcclient import XMLRPCClientFactory as factory
4 from const import reactor, NULL_ID
5 from xmlrpclib import Binary
6
7
8 class KNode(Node):
9     def makeResponse(self, df):
10         def _callback(args, d=df):
11             try:
12                 l, sender = args
13             except:
14                 d.callback(args)
15             else:
16                 if self.id != NULL_ID and sender['id'].data != self.id:
17                     d.errback()
18                 else:
19                     d.callback(args)
20         return _callback
21     def ping(self, sender):
22         df = Deferred()
23         f = factory('ping', (sender,), self.makeResponse(df), df.errback)
24         reactor.connectTCP(self.host, self.port, f)
25         return df
26     def findNode(self, target, sender):
27         df = Deferred()
28         f = factory('find_node', (Binary(target), sender), self.makeResponse(df), df.errback)
29         reactor.connectTCP(self.host, self.port, f)
30         return df
31     def storeValue(self, key, value, sender):
32         df = Deferred()
33         f = factory('store_value', (Binary(key), Binary(value), sender), self.makeResponse(df), df.errback)
34         reactor.connectTCP(self.host, self.port, f)
35         return df
36     def findValue(self, key, sender):
37         df = Deferred()
38         f = factory('find_value', (Binary(key), sender), self.makeResponse(df), df.errback)
39         reactor.connectTCP(self.host, self.port, f)
40         return df