using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using System; 
 | 
using vnxbqy.UI; 
 | 
  
 | 
public class CreateOrSelectRoleState : NetState  
 | 
{  
 | 
    const int OVERTIME_THRESHOLD = 12;  
 | 
    bool connectedDetecting = false;  
 | 
  
 | 
    NetworkReachability m_NetWorkReachability = NetworkReachability.ReachableViaCarrierDataNetwork;  
 | 
    NetworkReachability netWorkReachability {  
 | 
        get { return m_NetWorkReachability; }  
 | 
        set {  
 | 
            if (m_NetWorkReachability != value)  
 | 
            {  
 | 
                m_NetWorkReachability = value;  
 | 
                DetectConnected(3);  
 | 
            }  
 | 
        }  
 | 
    } 
 | 
  
 | 
    public override void OnEnter()  
 | 
    {  
 | 
        m_NetWorkReachability = Application.internetReachability;  
 | 
        NetLinkWin.Hide();  
 | 
        base.OnEnter();  
 | 
    } 
 | 
  
 | 
    protected override void Update()  
 | 
    {  
 | 
        if (GameNetSystem.Instance.netState != GameNetSystem.NetState.CreateOrSelectRole)  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
  
 | 
        if (connectedDetecting)  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
  
 | 
        if (GameNetSystem.Instance.timeSinceMainSocketLastProtocol > OVERTIME_THRESHOLD)  
 | 
        {  
 | 
            DetectConnected(3);  
 | 
        }  
 | 
        else if (!GameNetSystem.Instance.mainSocketConnected)  
 | 
        {  
 | 
            DetectConnected(3);  
 | 
        }  
 | 
        else  
 | 
        {  
 | 
#if UNITY_IOS && !UNITY_EDITOR  
 | 
            netWorkReachability = Application.internetReachability;  
 | 
#endif  
 | 
        } 
 | 
    } 
 | 
  
 | 
    public override void OnExit()  
 | 
    {  
 | 
        if (clock != null) 
 | 
        {  
 | 
            Clock.Stop(clock);  
 | 
        }  
 | 
        clock = null;  
 | 
        base.OnExit();  
 | 
    }  
 | 
  
 | 
    Clock clock;  
 | 
    private void DetectConnected(int _seconds)  
 | 
    {  
 | 
        connectedDetecting = true;  
 | 
  
 | 
        var sendInfo = new C0104_tagCOnlineReturn();  
 | 
        sendInfo.Type = 0;  
 | 
        GameNetSystem.Instance.SendInfo(sendInfo);// 在线回应  
 | 
  
 | 
        if (clock != null) 
 | 
        {  
 | 
            Clock.Stop(clock);  
 | 
        }  
 | 
        clock = Clock.AlarmAt(DateTime.Now + new TimeSpan(_seconds * TimeSpan.TicksPerSecond), OnDetectEnd);  
 | 
    }  
 | 
  
 | 
    private void OnDetectEnd()  
 | 
    {  
 | 
        connectedDetecting = false;  
 | 
  
 | 
        var isDisconnected = false;  
 | 
#if UNITY_IOS && !UNITY_EDITOR  
 | 
        isDisconnected = GameNetSystem.Instance.timeSinceMainSocketLastProtocol > 3f;  
 | 
#else  
 | 
        isDisconnected = !GameNetSystem.Instance.mainSocketConnected  
 | 
            || GameNetSystem.Instance.timeSinceMainSocketLastProtocol > OVERTIME_THRESHOLD;  
 | 
#endif  
 | 
  
 | 
        if (isDisconnected)  
 | 
        {  
 | 
            switch (Application.internetReachability)  
 | 
            {  
 | 
                case NetworkReachability.NotReachable:  
 | 
                    GameNetSystem.Instance.Disconnect();  
 | 
                    WindowCenter.Instance.Open<DisconnectHintWin>();  
 | 
                    break;  
 | 
                case NetworkReachability.ReachableViaCarrierDataNetwork:  
 | 
                case NetworkReachability.ReachableViaLocalAreaNetwork:  
 | 
                    GameNetSystem.Instance.Reconnect();  
 | 
                    break;  
 | 
            }  
 | 
        }  
 | 
    }  
 | 
  
 | 
    private void OnApplicationPause(bool pause)  
 | 
    {  
 | 
        if (GameNetSystem.Instance.netState != GameNetSystem.NetState.CreateOrSelectRole)  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
  
 | 
        if (!pause)  
 | 
        {  
 | 
            DetectConnected(3);  
 | 
        }  
 | 
    } 
 | 
  
 | 
} 
 |