public IEnumerator UpdateLoop(float updateDelay)
    {
        yield return(new WaitForSeconds(updateDelay));

        if (cManager)
        {
            switch (gameState)
            {
            case GameState.LOBBY:
                RequestKeepAlive keepAlive = new RequestKeepAlive();
                keepAlive.send();
                cManager.send(keepAlive);
                break;

            case GameState.LOADING_GAME:
                while (SceneManager.GetActiveScene().name != "Sandbox")
                {
                    yield return(null);
                }

                gameState = GameState.INGAME;
                RequestPushUpdate.init();
                ResponseHeartbeat.init();

                break;

            case GameState.INGAME:
                //Create the two request objects that will be sent to the server
                RequestHeartbeat  heartbeat  = (RequestHeartbeat)NetworkRequestTable.get(Constants.CMSG_HEARTBEAT);
                RequestPushUpdate pushUpdate = (RequestPushUpdate)NetworkRequestTable.get(Constants.CMSG_PUSHUPDATE);

                //Create the messages to be sent
                heartbeat.send();
                pushUpdate.send();

                //Send the messages
                cManager.send(heartbeat);
                cManager.send(pushUpdate);
                break;

            default:
                break;
            }
        }
        StartCoroutine(UpdateLoop(updateDelay));
    }
    public IEnumerator UpdateLoop(float updateDelay)
    {
        yield return(new WaitForSeconds(updateDelay));

        if (cManager)
        {
            switch (gameState)
            {
            case GameState.LOBBY:
            // will have specific request to keep it live at this point
            // but doesn't yet...
            // todo: add getLobbies code when lobbies are implemented
            // break;
            case GameState.LOGIN:
            case GameState.MAIN_MENU:
                if (lastState == GameState.GAME)
                {
                    sceneController.FadeAndLoadScene("Main_Menu");                                  // reload menu after a game;
                }
                RequestKeepAlive keepAlive = new RequestKeepAlive();
                keepAlive.send();
                cManager.send(keepAlive);
                break;

            case GameState.GAME:
                if (lastState == GameState.MAIN_MENU)
                {
                    sceneController.FadeAndLoadScene("Game_Scene");

                    while (SceneManager.GetActiveScene().name != "Game_Scene")
                    {
                        yield return(null);
                    }

                    Constants.loadSceneAConstants();

                    setCharacterValues();

                    Debug.Log("Joined Game");
                }

                //Create the two request objects that will be sent to the server
                RequestHeartbeat  heartbeat  = (RequestHeartbeat)NetworkRequestTable.get(Constants.CMSG_HEARTBEAT);
                RequestPushUpdate pushUpdate = (RequestPushUpdate)NetworkRequestTable.get(Constants.CMSG_PUSHUPDATE);

                //Create the messages to be sent
                heartbeat.send();
                pushUpdate.send();

                //Send the messages
                cManager.send(heartbeat);
                cManager.send(pushUpdate);

                break;

            default:
                break;
            }

            lastState = gameState;
        }
        StartCoroutine(UpdateLoop(updateDelay));
    }