]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - knode.py
changed from bsddb3 to pysqlite
[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
6 class KNode(Node):
7     def makeResponse(self, df):
8         def _callback(args, d=df):
9             try:
10                 l, sender = args
11             except:
12                 d.callback(args)
13             else:
14                 if self.id != NULL_ID and sender['id'] != self._senderDict['id']:
15                     d.errback()
16                 else:
17                     d.callback(args)
18         return _callback
19     def ping(self, sender):
20         df = Deferred()
21         f = factory('ping', (sender,), self.makeResponse(df), df.errback)
22         reactor.connectTCP(self.host, self.port, f)
23         return df
24     def findNode(self, target, sender):
25         df = Deferred()
26         f = factory('find_node', (target.encode('base64'), sender), self.makeResponse(df), df.errback)
27         reactor.connectTCP(self.host, self.port, f)
28         return df
29     def storeValue(self, key, value, sender):
30         df = Deferred()
31         f = factory('store_value', (key.encode('base64'), value.encode('base64'), sender), self.makeResponse(df), df.errback)
32         reactor.connectTCP(self.host, self.port, f)
33         return df
34     def findValue(self, key, sender):
35         df = Deferred()
36         f = factory('find_value', (key.encode('base64'), sender), self.makeResponse(df), df.errback)
37         reactor.connectTCP(self.host, self.port, f)
38         return df