async def METHOD_NAME(
    activation_id: str, websocket_address: str, websocket_ssl_verify: str
) -> StartupArgs:
    logger.info("websocket %s connecting", websocket_address)
    async with websockets.connect(
        websocket_address,
        ssl=_sslcontext(websocket_address, websocket_ssl_verify),
    ) as websocket:
        try:
            logger.info("websocket %s connected", websocket_address)
            await websocket.send(
                json.dumps(dict(type="Worker", activation_id=activation_id))
            )
            project_data_fh = None
            response = StartupArgs()
            while True:
                msg = await websocket.recv()
                data = json.loads(msg)
                if data.get("type") == "EndOfResponse":
                    break
                if data.get("type") == "ProjectData":
                    if not project_data_fh:
                        (
                            project_data_fh,
                            response.project_data_file,
                        ) = tempfile.mkstemp()
                    if data.get("data") and data.get("more"):
                        os.write(
                            project_data_fh, base64.b64decode(data.get("data"))
                        )
                    if not data.get("data") and not data.get("more"):
                        os.close(project_data_fh)
                        logger.debug("wrote %s", response.project_data_file)
                if data.get("type") == "Rulebook":
                    response.rulesets = rules_parser.parse_rule_sets(
                        yaml.safe_load(base64.b64decode(data.get("data")))
                    )
                if data.get("type") == "ExtraVars":
                    response.variables = yaml.safe_load(
                        base64.b64decode(data.get("data"))
                    )
                if data.get("type") == "ControllerInfo":
                    response.controller_url = data.get("url")
                    response.controller_token = data.get("token")
                    response.controller_verify_ssl = data.get("ssl_verify")
            return response
        except CancelledError:
            logger.info("closing websocket due to task cancelled")
            return
        except websockets.exceptions.ConnectionClosed:
            logger.info("websocket %s closed", websocket_address)
            return