Example #1
0
    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
Example #2
0
    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
Example #3
0
 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
Example #4
0
    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
Example #5
0
 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
Example #6
0
    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