Example #1
0
    def respondToHandshake(self, NodeId, ListeningPort, ProtocolVersion):
        ip = self.transport.getPeer().host
        d = Mercury.checkIfNodeExists(NodeId)

        def processNode(nodeExists):
            if nodeExists:
                return  Mercury.updateAndGetNode(NodeId, ip, ListeningPort) # This returns deferred
            else:
                return Mercury.createNode(NodeId, ip, ListeningPort)

        d.addCallback(processNode)

        def callReverseSync(node):
            # I'm going to ask for nodes in parallel with already existing header call.
            d = self.requestHeaders(node)
            d.addCallback(self.requestNodes)
            return node

        d.addCallback(callReverseSync)\
         .addErrback(self.closeConnection, 'INBOUND', callReverseSync.__name__)

        d.addCallback(self.setGlobalConnectedNode) # This is at one level up, directly below protocol class.
        reply = {'NodeId': self.factory.localNodeId,
                 'ListeningPort': aetherListeningPort,
                 'ProtocolVersion': protocolVersion }
        cprint('FROM REMOTE: HANDSHAKE REQUEST: from %s:%s'
                %(ip, ListeningPort), 'white', 'on_yellow', attrs=['bold'])
        cprint('ANSWER: %s' %(reply), 'white', 'on_yellow')
        print('\n')
        return reply
Example #2
0
        def replyArrived(reply):
            cprint('RECEIVED: HANDSHAKE REPLY. \n%s' %(reply), 'cyan', 'on_blue')
            print('\n')
            ip = self.transport.getPeer().host
            d = Mercury.checkIfNodeExists(reply['NodeId'])

            def processNode(nodeExists):
                if nodeExists:
                    return Mercury.updateAndGetNode(reply['NodeId'], ip, reply['ListeningPort'])
                    # This returns deferred
                else:
                    return Mercury.createNode(reply['NodeId'], ip, reply['ListeningPort'])
            d.addCallback(processNode)
            d.addCallback(self.setGlobalConnectedNode) # This is at one level up, directly below protocol class.
            d.addCallback(self.requestHeaders)
            d.addCallback(self.requestNodes)
        def replyArrived(reply):
            cprint('RECEIVED: HANDSHAKE REPLY. \n%s' % (reply), 'cyan',
                   'on_blue')
            print('\n')
            ip = self.transport.getPeer().host
            d = Mercury.checkIfNodeExists(reply['NodeId'])

            def processNode(nodeExists):
                if nodeExists:
                    return Mercury.updateAndGetNode(reply['NodeId'], ip,
                                                    reply['ListeningPort'])
                    # This returns deferred
                else:
                    return Mercury.createNode(reply['NodeId'], ip,
                                              reply['ListeningPort'])

            d.addCallback(processNode)
            d.addCallback(
                self.setGlobalConnectedNode
            )  # This is at one level up, directly below protocol class.
            d.addCallback(self.requestHeaders)
            d.addCallback(self.requestNodes)
    def respondToHandshake(self, NodeId, ListeningPort, ProtocolVersion):
        ip = self.transport.getPeer().host
        d = Mercury.checkIfNodeExists(NodeId)

        def processNode(nodeExists):
            if nodeExists:
                return Mercury.updateAndGetNode(
                    NodeId, ip, ListeningPort)  # This returns deferred
            else:
                return Mercury.createNode(NodeId, ip, ListeningPort)

        d.addCallback(processNode)

        def callReverseSync(node):
            # I'm going to ask for nodes in parallel with already existing header call.
            d = self.requestHeaders(node)
            d.addCallback(self.requestNodes)
            return node

        d.addCallback(callReverseSync)\
         .addErrback(self.closeConnection, 'INBOUND', callReverseSync.__name__)

        d.addCallback(
            self.setGlobalConnectedNode
        )  # This is at one level up, directly below protocol class.
        reply = {
            'NodeId': self.factory.localNodeId,
            'ListeningPort': aetherListeningPort,
            'ProtocolVersion': protocolVersion
        }
        cprint('FROM REMOTE: HANDSHAKE REQUEST: from %s:%s' %
               (ip, ListeningPort),
               'white',
               'on_yellow',
               attrs=['bold'])
        cprint('ANSWER: %s' % (reply), 'white', 'on_yellow')
        print('\n')
        return reply