def test_high_level_echo(self):
        data = []
        data.append("")
        data.append("0123456789")
        data.append("0123456789" * 20)
        data.append("0123456789" * 2000)
        data.append("0123456789" * 20000)
        data.append("0123456789" * 200000)

        data.append(b"")
        data.append(b"0123456789")
        data.append(b"0123456789" * 20)
        data.append(b"0123456789" * 2000)
        data.append(b"0123456789" * 20000)
        data.append(b"0123456789" * 200000)

        class EchoApplication(WebSocketApplication):
            def on_open(self):
                server.logger.info("Connection opened")

            def on_message(self, message):
                if message is None:
                    return
                server.logger.info("Message received %s", len(message))
                self.ws.send(message)

            def on_close(self, reason):
                server.logger.info("Connection closed %s", reason)

        server = WebSocketServer(self.s_socket, Resource(OrderedDict([('/', EchoApplication)])), debug=True)
        server.start()
        self.server = server
        try:
            self.server_thread = Thread(target=self.start_server)
            self.server_thread.start()

            ws = create_connection("ws://%s:%s/" % (self.server.environ["SERVER_NAME"],
                                                    self.server.environ["SERVER_PORT"]))

            try:
                for i in range(2):
                    if i == 1:
                        ws.set_mask_key(lambda _: b'1234')
                    for d in data:
                        if isinstance(d, bytes):
                            ws.send_binary(d)
                        else:
                            ws.send(d)
                        self.assertEqual(ws.recv(), d)

                    ws.ping("ping")
                    pong = ws.recv_data_frame(10)
                    self.assertEqual(pong[0], pong[1].OPCODE_PONG)
                    self.assertEqual(pong[1].data, b'ping')
                    self.assertFalse(self.err)
            finally:
                ws.close(timeout=10)
        finally:
            server.close()
Exemple #2
0
 def run_forever(self, host='0.0.0.0', debug=False):
     try:
         dealer_server = WebSocketServer(
             (host, 8080),
             Resource(OrderedDict({'/': DealerApplication})),
             debug=debug)
         dealer_server.serve_forever()
     except KeyboardInterrupt:
         dealer_server.close()
         raise KeyboardInterrupt
Exemple #3
0
 def run_forever(self, host='0.0.0.0', debug=False):
     try:
         dealer_server = WebSocketServer(
             (host, 8080),
             Resource(OrderedDict({'/': DealerApplication})),
             debug=debug)
         dealer_server.serve_forever()
     except KeyboardInterrupt:
         dealer_server.close()
         raise KeyboardInterrupt
Exemple #4
0
# Catch SIGNTERM and
signal.signal(signal.SIGINT, signalCatch)
signal.signal(signal.SIGTERM, signalCatch)

# Init the sync application
wsInit(verbose)

# Start the Redis thread
try:
    if verbose: print('Starting the Redis thread')
    thread = threading.Thread(target=redisThread)
    thread.daemon = True
    thread.start()
except Exception as e:
    print('Failed to start Redis thread: %s' % str(e))

# Get the host and port
dConf = Conf.get('websocket', {"host": "0.0.0.0", "port": 8001})

# Create the websocket server
if verbose: print('Starting the WebSocket server')
server = WebSocketServer((dConf['host'], dConf['port']),
                         Resource(OrderedDict([('/', SyncApplication)])))

try:
    server.serve_forever()
except KeyboardInterrupt:
    pass

server.close()
            try:
                msg = os.tp_read(self.tuntap.fd, 1500)
                if not msg:
                    break
            except IOError:
                break
            if self.ws.closed:
                break
            self.ws.send(msg, True)

    def on_open(self):
        self.reader = gevent.spawn(self.read_fd)

    def on_close(self, reason):
        if (hasattr(self, 'reader')):
            self.reader.kill()

    def on_message(self, msg):
        if not msg:
            return
        os.tp_write(self.tuntap.fd, msg)

if __name__ == "__main__":
    server.tuntap = tuntap.tuntap(args.tuntap)
    wss = WebSocketServer((args.src, args.port), Resource({args.loc: server}))

    try:
        wss.serve_forever()
    except KeyboardInterrupt:
        wss.close()