public void RequestHackEnergyTank(Point3d entryPoint, EnergyTankData energyTankData)
    {
        Debug.Log("GameWorldModel:requestHackEnergyTank - Hacking energy tank id="
            +energyTankData.energy_tank_id+" at position ("+ entryPoint.x + ", " + entryPoint.y + ")");

        if (!IsHackEnergyTankRequestPending)
        {
            GameData gameData = SessionData.GetInstance().CurrentGameData;
            CharacterEntity entity = GetCharacterEntity(CurrentCharacterID);
            AsyncHackEnergyTankRequest hackEnergyTankRequest = null;

            IsHackEnergyTankRequestPending = true;

            hackEnergyTankRequest =
                new AsyncHackEnergyTankRequest(m_gameWorldController.gameObject, entity, entryPoint, energyTankData);

            hackEnergyTankRequest.Execute(
                (AsyncHackEnergyTankRequest asyncRequest) =>
            {
                IsHackEnergyTankRequestPending = false;

                switch (asyncRequest.ResultCode)
                {
                case AsyncHackEnergyTankRequest.eResult.success:
                    {
                        Debug.Log("GameWorldModel:requestHackEnergyTank - Hack Succeeded!");

                        // Tell anyone listening on IRC that the game state changed
                        m_gameWorldController.SendCharacterUpdatedGameEvent();

                        // Parse any incoming game events
                        if (asyncRequest.ServerResponse != null)
                        {
                            gameData.ParseEventResponse(asyncRequest.ServerResponse);
                        }

                        // If there were new events, notify the controller so that
                        // it can start playing the events back
                        if (!gameData.IsEventCursorAtLastEvent)
                        {
                            m_gameWorldController.OnGameHasNewEvents();
                        }
                    }
                    break;
                case AsyncHackEnergyTankRequest.eResult.failed_path:
                case AsyncHackEnergyTankRequest.eResult.failed_server_denied:
                    {
                        Debug.LogError("GameWorldModel:requestHackEnergyTank - " + asyncRequest.ResultDetails);

                        m_gameWorldController.OnCharacterActionDisallowed(asyncRequest);
                    }
                    break;
                case AsyncHackEnergyTankRequest.eResult.failed_server_connection:
                    {
                        Debug.LogError("GameWorldModel:requestHackEnergyTank - " + asyncRequest.ResultDetails);

                        m_gameWorldController.OnRequestFailed("Connection Failed!");
                    }
                    break;
                }
            });
        }
    }
    public void RequestHackEnergyTank(Point3d entryPoint, EnergyTankData energyTankData)
    {
        Debug.Log("GameWorldModel:requestHackEnergyTank - Hacking energy tank id="
                  + energyTankData.energy_tank_id + " at position (" + entryPoint.x + ", " + entryPoint.y + ")");

        if (!IsHackEnergyTankRequestPending)
        {
            GameData                   gameData = SessionData.GetInstance().CurrentGameData;
            CharacterEntity            entity   = GetCharacterEntity(CurrentCharacterID);
            AsyncHackEnergyTankRequest hackEnergyTankRequest = null;

            IsHackEnergyTankRequestPending = true;

            hackEnergyTankRequest =
                new AsyncHackEnergyTankRequest(m_gameWorldController.gameObject, entity, entryPoint, energyTankData);

            hackEnergyTankRequest.Execute(
                (AsyncHackEnergyTankRequest asyncRequest) =>
            {
                IsHackEnergyTankRequestPending = false;

                switch (asyncRequest.ResultCode)
                {
                case AsyncHackEnergyTankRequest.eResult.success:
                    {
                        Debug.Log("GameWorldModel:requestHackEnergyTank - Hack Succeeded!");

                        // Tell anyone listening on IRC that the game state changed
                        m_gameWorldController.SendCharacterUpdatedGameEvent();

                        // Parse any incoming game events
                        if (asyncRequest.ServerResponse != null)
                        {
                            gameData.ParseEventResponse(asyncRequest.ServerResponse);
                        }

                        // If there were new events, notify the controller so that
                        // it can start playing the events back
                        if (!gameData.IsEventCursorAtLastEvent)
                        {
                            m_gameWorldController.OnGameHasNewEvents();
                        }
                    }
                    break;

                case AsyncHackEnergyTankRequest.eResult.failed_path:
                case AsyncHackEnergyTankRequest.eResult.failed_server_denied:
                    {
                        Debug.LogError("GameWorldModel:requestHackEnergyTank - " + asyncRequest.ResultDetails);

                        m_gameWorldController.OnCharacterActionDisallowed(asyncRequest);
                    }
                    break;

                case AsyncHackEnergyTankRequest.eResult.failed_server_connection:
                    {
                        Debug.LogError("GameWorldModel:requestHackEnergyTank - " + asyncRequest.ResultDetails);

                        m_gameWorldController.OnRequestFailed("Connection Failed!");
                    }
                    break;
                }
            });
        }
    }