예제 #1
0
    def handle_connection(self, c, address):
        logging.info('New connection from %s:%s' % address)
        try:
            if self.handshake:
                expected_challenge, response = self.handshake
                logging.debug('Awaiting challenge.')
                challenge = c.recv()
                logging.debug('Got challenge: "%s"', challenge)
                if challenge == expected_challenge:
                    logging.debug('Correct challenge, sending response: "%s"', response)
                    c.send(response)
                    c.flush()
                else:
                    logging.warning('Failed handshake!')
                    logging.warning('Expected challenge: %s', expected_challenge)
                    logging.warning('Actual challenge: %s', challenge)
                    return

            q = Queue()
            f = Queue()
            coio.stackless.tasklet(self.sender)(q, c, f)
            coio.stackless.tasklet(self.receiver)(q, c, f)
            f.popleft()
            f.popleft()
        except DisconnectedException:
            logging.warning('Client disconnected')
        finally:
            try:
                c.close()
                logging.info('Connection closed')
            except DisconnectedException:
                pass
예제 #2
0
 def testResilience(self):
     try:
         token = id(self)
         q = Queue()
         def callback(value, token):
             q.append((value, token))
         port = 6000
         host = ('localhost', port)
         p = launch_echoserver(port)
         coio.sleep(1)
         messenger = Messenger(host, reconnect_max_interval=0.1)
         messenger.connect()
         messenger.send('1', token, callback)
         assert q.popleft() == ('1', token)
         os.kill(p.pid, signal.SIGKILL)
         messenger.send('2', token, callback)
         coio.sleep(1)
         messenger.send('3', token, callback)
         assert q.popleft() == (None, token)
         assert q.popleft() == (None, token)
         p = launch_echoserver(port)
         coio.sleep(1)
         messenger.send('4', token, callback)
         assert q.popleft() == ('4', token)
         messenger.close()
         coio.sleep(1)
     finally:
         os.kill(p.pid, signal.SIGKILL)
예제 #3
0
    def testResilience(self):
        try:
            token = id(self)
            q = Queue()

            def callback(value, token):
                q.append((value, token))

            port = 6000
            host = ('localhost', port)
            p = launch_echoserver(port)
            coio.sleep(1)
            messenger = Messenger(host, reconnect_max_interval=0.1)
            messenger.connect()
            messenger.send('1', token, callback)
            assert q.popleft() == ('1', token)
            os.kill(p.pid, signal.SIGKILL)
            messenger.send('2', token, callback)
            coio.sleep(1)
            messenger.send('3', token, callback)
            assert q.popleft() == (None, token)
            assert q.popleft() == (None, token)
            p = launch_echoserver(port)
            coio.sleep(1)
            messenger.send('4', token, callback)
            assert q.popleft() == ('4', token)
            messenger.close()
            coio.sleep(1)
        finally:
            os.kill(p.pid, signal.SIGKILL)