public void AdvertiseServer()
    {
        mResult = null;

        mRoomCode = GenerateRoomCode();

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

        mAdvertiseServerSubStatus = AdvertiseServerSubStatus.Creating;

        // Tell Update() to do the work.
        mAdvertiseServerTriggered = true;
    }
    protected void AdvertiseServer_Update()
    {
        if (mAdvertiseServerTriggered)
        {
            if (Time.time > mEndTime)
            {
                if (mIsDebug)
                {
                    Debug.Log("ServerLookupWifiDirect: AdvertiseServerUpdate() timeout.");
                }
                mResult = "failure";
                mAdvertiseServerTriggered = false;
            }
            else if (Time.time > mNextSubCall)
            {
                if (mAdvertiseServerSubStatus == AdvertiseServerSubStatus.Creating)
                {
                    if (mIsDebug)
                    {
                        Debug.Log("ServerLookupWifiDirect: Calling CreateNetwork().");
                    }
                    mWifiP2P.CreateNetwork();
                    mAdvertiseServerSubStatus = AdvertiseServerSubStatus.Created;
                    mNextSubCall = Time.time + mSubCallCoolDown;
                }
                else if (mAdvertiseServerSubStatus == AdvertiseServerSubStatus.Created)
                {
                    if (mWifiP2P.GetCreateNetworkStatus() == -1)
                    {
                        // Success. Go to next phase.
                        if (mIsDebug)
                        {
                            Debug.Log("ServerLookupWifiDirect: CreateNetwork() success.");
                        }
                        mAdvertiseServerSubStatus = AdvertiseServerSubStatus.Advertising;
                        mNextSubCall = Time.time + mSubCallCoolDown;
                    }
                    else
                    {
                        // Try again. Don't continue further below.
                        if (mIsDebug)
                        {
                            Debug.Log("ServerLookupWifiDirect: CreateNetwork() failure.");
                        }
                        mAdvertiseServerSubStatus = AdvertiseServerSubStatus.Creating;
                        mNextSubCall = Time.time + mSubErrCoolDown;
                    }
                }
                else if (mAdvertiseServerSubStatus == AdvertiseServerSubStatus.Advertising)
                {
                    if (mIsDebug)
                    {
                        Debug.Log("ServerLookupWifiDirect: Calling AdvertiseNetwork().");
                    }
                    mWifiP2P.AdvertiseNetwork(mRoomCode, mWifiDirectServiceName, mWifiDirectAdvertisedPort);
                    mAdvertiseServerSubStatus = AdvertiseServerSubStatus.Advertised;
                    mNextSubCall = Time.time + mSubCallCoolDown;
                }
                else if (mAdvertiseServerSubStatus == AdvertiseServerSubStatus.Advertised)
                {
                    if (mWifiP2P.GetAdvertiseNetworkStatus() == -1)
                    {
                        // Success.
                        if (mIsDebug)
                        {
                            Debug.Log("ServerLookupWifiDirect: AdvertiseNetwork() success - Room Code: " +
                                      mRoomCode + ".");
                        }
                        mResult = mRoomCode;
                        mAdvertiseServerTriggered = false;

                        mAdvertiseServerMaintainTriggered = true;
                        mNextSubCall = Time.time + mAdvertiseCoolDown;
                    }
                    else
                    {
                        // Try again.
                        if (mIsDebug)
                        {
                            Debug.Log("ServerLookupWifiDirect: AdvertiseNetwork() failure.");
                        }
                        mAdvertiseServerSubStatus = AdvertiseServerSubStatus.Advertising;
                        mNextSubCall = Time.time + mSubErrCoolDown;
                    }
                }
            }
        }
        else if (mAdvertiseServerMaintainTriggered)
        {
//			if (Time.time > mNextSubCall)
//			{
//				mWifiP2P.AdvertiseNetwork(mRoomCode, mWifiDirectServiceName, mWifiDirectAdvertisedPort);
//				mNextSubCall = Time.time + mAdvertiseCoolDown;
//			}
        }
    }