public void Cancel()
    {
        Debug.Log("ServerLookupWifiDirect: Cancel() called.");

        mResult = null;

        mNextSubCall = Time.time;
        mEndTime     = Time.time + mFuncTimeoutSec;

        mCancelSubStatus = CancelSubStatus.Unjoining;
        mAdvertiseServerMaintainTriggered = false;

        // Tell Update() to do the work.
        mCancelTriggered = true;
    }
 protected void Cancel_Update()
 {
     if (mCancelTriggered)
     {
         // Stop trying if timeout.
         if (Time.time > mEndTime)
         {
             if (mIsDebug)
             {
                 Debug.Log("ServerLookupWifiDirect: CancelAdvertiseServer() timeout.");
             }
             mResult          = "failure";
             mCancelTriggered = false;
         }
         else if (Time.time > mNextSubCall)
         {
             if (mCancelSubStatus == CancelSubStatus.Unjoining)
             {
                 if (mIsDebug)
                 {
                     Debug.Log("ServerLookupWifiDirect: Calling CancelJoinNetwork().");
                 }
                 mWifiP2P.CancelJoinNetwork();
                 mCancelSubStatus = CancelSubStatus.Unjoined;
                 mNextSubCall     = Time.time + mSubCallCoolDown;
             }
             else if (mCancelSubStatus == CancelSubStatus.Unjoined)
             {
                 if (mWifiP2P.GetCancelJoinNetworkStatus() == -1 ||
                     mWifiP2P.GetCancelJoinNetworkStatus() == 2)                                     // Nothing to cancel joining. Ok.
                 {
                     // Success.
                     if (mIsDebug)
                     {
                         Debug.Log("ServerLookupWifiDirect: CancelJoinNetwork() success.");
                     }
                     mCancelSubStatus = CancelSubStatus.MemoryRemoving;
                     mNextSubCall     = Time.time;
                 }
                 else if (mWifiP2P.GetCancelJoinNetworkStatus() == -2)
                 {
                     // Results not ready. Try again later.
                     mNextSubCall = Time.time + mSubCallCoolDown;
                 }
                 else
                 {
                     // Failure.
                     if (mIsDebug)
                     {
                         Debug.Log("ServerLookupWifiDirect: CancelJoinNetwork() failure.");
                     }
                     mResult          = "failure";
                     mCancelTriggered = false;
                 }
             }
             else if (mCancelSubStatus == CancelSubStatus.MemoryRemoving)
             {
                 if (mIsDebug)
                 {
                     Debug.Log("ServerLookupWifiDirect: Calling RemoveRememberedNetwork().");
                 }
                 mWifiP2P.RemoveRememberedNetwork();
                 mCancelSubStatus = CancelSubStatus.Disconnecting;
                 mNextSubCall     = Time.time + mSubCallCoolDown;
             }
             else if (mCancelSubStatus == CancelSubStatus.Disconnecting)
             {
                 if (mIsDebug)
                 {
                     Debug.Log("ServerLookupWifiDirect: Calling DisconnectFromNetwork().");
                 }
                 mWifiP2P.DisconnectFromNetwork();
                 mCancelSubStatus = CancelSubStatus.Disconnected;
                 mNextSubCall     = Time.time + mSubCallCoolDown;
             }
             else if (mCancelSubStatus == CancelSubStatus.Disconnected)
             {
                 if (mWifiP2P.GetDisconnectFromNetworkStatus() == -1 ||
                     mWifiP2P.GetDisconnectFromNetworkStatus() == 2)                                 // Nothing to disconnect. Ok.
                 {
                     // Success.
                     if (mIsDebug)
                     {
                         Debug.Log("ServerLookupWifiDirect: DisconnectFromNetwork() success.");
                     }
                     mCancelSubStatus = CancelSubStatus.AdvertiseStopping;
                     mNextSubCall     = Time.time;
                 }
                 else if (mWifiP2P.GetDisconnectFromNetworkStatus() == -2)
                 {
                     // Results not ready. Try again later.
                     mNextSubCall = Time.time + mSubCallCoolDown;
                 }
                 else
                 {
                     // Failure.
                     if (mIsDebug)
                     {
                         Debug.Log("ServerLookupWifiDirect: DisconnectFromNetwork() failure.");
                     }
                     mResult          = "failure";
                     mCancelTriggered = false;
                 }
             }
             else if (mCancelSubStatus == CancelSubStatus.AdvertiseStopping)
             {
                 if (mIsDebug)
                 {
                     Debug.Log("ServerLookupWifiDirect: Calling StopAdvertiseNetwork().");
                 }
                 mWifiP2P.StopAdvertiseNetwork();
                 mCancelSubStatus = CancelSubStatus.AdvertiseStopped;
                 mNextSubCall     = Time.time;
             }
             else if (mCancelSubStatus == CancelSubStatus.AdvertiseStopped)
             {
                 mResult          = "success";
                 mCancelTriggered = false;
             }
         }
     }
 }