async def METHOD_NAME(self, endpoint, sub_msg, callback):
    """
    Base asyncio.Task to connect and manage websocket.
    Parameters:
        endpoint (str): example: /openc3-api/cable
        sub_msg (dict): json based message to send
        callback (callable): method/function to call with data
    """
    url = f"{self._url}{endpoint}"
    try:
        ws = await websockets.connect(
            f"{url}?scope={OPENC3_SCOPE}&authorization={self.auth.get()}",
            loop=self._loop,
        )
        await self._welcome(ws)
        await self._confirm(ws, sub_msg)
        await self._handle(endpoint, ws, callback)
        await ws.close()
    except asyncio.CancelledError:
        logging.info(f"{endpoint} has been canceled")
    except CosmosAsyncStop:
        logging.info(f"stopping {endpoint}")
    except CosmosAsyncError as e:
        logging.error(f"failed connection {endpoint}, {e}")
    except Exception as e:
        logging.exception(e)
    finally:
        logging.debug(f"exitting task: {endpoint}")
        self._queues.pop(endpoint, None)
        self._events.pop(endpoint, None)