]> git.mxchange.org Git - quix0rs-apt-p2p.git/blob - knode.py
reformatting plus changed some method names, added a new function for "testing"
[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                 """ Make our callback cover that checks to make sure the id of the response is the same as what we are expecting """
9                 def _callback(args, d=df):
10                         try:
11                                 l, sender = args
12                         except:
13                                 d.callback(args)
14                         else:
15                                 if self.id != NULL_ID and sender['id'] != self._senderDict['id']:
16                                         d.errback()
17                                 else:
18                                         d.callback(args)
19                 return _callback
20         def ping(self, sender):
21                 df = Deferred()
22                 f = factory('ping', (sender,), self.makeResponse(df), df.errback)
23                 reactor.connectTCP(self.host, self.port, f)
24                 return df
25         def findNode(self, target, sender):
26                 df = Deferred()
27                 f = factory('find_node', (target.encode('base64'), sender), self.makeResponse(df), df.errback)
28                 reactor.connectTCP(self.host, self.port, f)
29                 return df
30         def storeValue(self, key, value, sender):
31                 df = Deferred()
32                 f = factory('store_value', (key.encode('base64'), value.encode('base64'), sender), self.makeResponse(df), df.errback)
33                 reactor.connectTCP(self.host, self.port, f)
34                 return df
35         def findValue(self, key, sender):
36                 df = Deferred()
37                 f = factory('find_value', (key.encode('base64'), sender), self.makeResponse(df), df.errback)
38                 reactor.connectTCP(self.host, self.port, f)
39                 return df