def start(self, port=None, io_loop=None): """ Start server if not yet started. Raise an exception if server is already started. :param port: (optional) port where server must run. If not provided, try to start on a random selected port. Use property `port` to get current server port. :param io_loop: (optional) tornado IO lopp where server must run. If not provided, get default IO loop instance (tornado.ioloop.IOLoop.instance()). """ if self.backend is not None: raise exceptions.DiplomacyException( 'Server is already running on port %s.' % self.backend.port) if port is None: port = 8432 if io_loop is None: io_loop = tornado.ioloop.IOLoop.instance() handlers = [ tornado.web.url(r"/", ConnectionHandler, {'server': self}), ] settings = { 'cookie_secret': common.generate_token(), 'xsrf_cookies': True, 'websocket_ping_interval': self.ping_seconds, 'websocket_ping_timeout': 2 * self.ping_seconds, 'websocket_max_message_size': 64 * 1024 * 1024 } self.backend = _ServerBackend() self.backend.application = tornado.web.Application( handlers, **settings) self.backend.http_server = self.backend.application.listen(port) self.backend.io_loop = io_loop self.backend.port = port self.set_tasks(io_loop) LOGGER.info('Running on port %d', self.backend.port) if not io_loop.asyncio_loop.is_running(): io_loop.start()
def create_token(self): """ Return a new token guaranteed to not exist in this Users object. """ token = generate_token() while self.has_token(token): token = generate_token() return token
def test_generate_token(): """ Test token generation. """ for n_bytes in (128, 344): token = common.generate_token(n_bytes) assert isinstance(token, str) and len(token) == 2 * n_bytes