def set(self, key, value): hex_key = hashlib.sha1(str(key)).hexdigest() hash_key = Hash.from_str(hex_key) node = self.node.find_node(hash_key) if node.hash == self.node.start: # to my będziemy przechowywać ten klucz print "Zapisano klucz-wartość" val = self.node.set(hash_key, value) return {'status': val} else: d = self.server.find_node( hash_key, node.address, node.port) # szukamy odpowiedniego serwera, zwracamy deffer def callback( res): # res zawiera dane serwera na ktorym moze byc klucz # podłączamy się do niego d1 = ClientCreator(reactor, amp.AMP).connectTCP(res['address'], res['port']) d1.addCallback( lambda p: p.callRemote(commands.Set, key=key, value=value)) return d1 # deffer, który zawierać będzie wynik metody set na właściwym serwerze d.addCallback(callback) return d
def get(self, key): hex_key = hashlib.sha1(str(key)).hexdigest() hash_key = Hash.from_str(hex_key) node = self.node.find_node(hash_key) if node.hash == self.node.start: # to my mamy ten klucz print "Pobrano klucz" val = self.node.find(hash_key) return {'value': val} else: d = self.server.find_node( hash_key, node.address, node.port) # szukamy odpowiedniego serwera, zwracamy deffer def callback( res): # res zawiera dane serwera na ktorym moze byc klucz # podłączamy się do niego d1 = ClientCreator(reactor, amp.AMP).connectTCP(res['address'], res['port']) d1.addCallback(lambda p: p.callRemote(commands.Get, key=key)) def trapError(result): result.trap(Exception) raise result.type() d1.addErrback(trapError) return d1 # deffer, który zawierać będzie wynik metody get na właściwym serwerze d.addCallback(callback) return d
def __init__(self, address, port, next_address=None, next_port=None): self.address = address self.port = port self.key = Hash.from_str(address) self.pf = ProtoFactory(str(self.key), self) if next_address and next_port: # server bedzie wlaczony do aktualnej sieci self.make_server(next_address, next_port) else: self.node = Node(self.address, self.port, self.key, self.key.prev()) self.pf.node = self.node
def set(self, key, value): hex_key = hashlib.sha1(str(key)).hexdigest() hash_key = Hash.from_str(hex_key) node = self.node.find_node(hash_key) if node.hash == self.node.start: # to my będziemy przechowywać ten klucz print "Zapisano klucz-wartość" val = self.node.set(hash_key, value) return {'status': val} else: d = self.server.find_node(hash_key, node.address, node.port) # szukamy odpowiedniego serwera, zwracamy deffer def callback(res): # res zawiera dane serwera na ktorym moze byc klucz # podłączamy się do niego d1 = ClientCreator(reactor, amp.AMP).connectTCP(res['address'], res['port']) d1.addCallback(lambda p: p.callRemote(commands.Set, key=key, value=value)) return d1 # deffer, który zawierać będzie wynik metody set na właściwym serwerze d.addCallback(callback) return d
def get(self, key): hex_key = hashlib.sha1(str(key)).hexdigest() hash_key = Hash.from_str(hex_key) node = self.node.find_node(hash_key) if node.hash == self.node.start: # to my mamy ten klucz print "Pobrano klucz" val = self.node.find(hash_key) return {'value': val} else: d = self.server.find_node(hash_key, node.address, node.port) # szukamy odpowiedniego serwera, zwracamy deffer def callback(res): # res zawiera dane serwera na ktorym moze byc klucz # podłączamy się do niego d1 = ClientCreator(reactor, amp.AMP).connectTCP(res['address'], res['port']) d1.addCallback(lambda p: p.callRemote(commands.Get, key=key)) def trapError(result): result.trap(Exception) raise result.type() d1.addErrback(trapError) return d1 # deffer, który zawierać będzie wynik metody get na właściwym serwerze d.addCallback(callback) return d