using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using System; 
 | 
  
 | 
public class ConnectedState : NetState 
 | 
{ 
 | 
  
 | 
    const int OVERTIME_THRESHOLD = 20; 
 | 
  
 | 
    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() 
 | 
    { 
 | 
        base.OnEnter(); 
 | 
  
 | 
        m_NetWorkReachability = Application.internetReachability; 
 | 
        NetLinkWin.Hide(); 
 | 
    } 
 | 
  
 | 
    protected override void Update() 
 | 
    { 
 | 
        if (GameNetSystem.Instance.netState != GameNetSystem.NetState.Connected) 
 | 
        { 
 | 
            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 
 | 
        } 
 | 
    } 
 | 
  
 | 
    Clock clock; 
 | 
  
 | 
    public override void OnExit() 
 | 
    { 
 | 
        if (clock != null) 
 | 
        { 
 | 
            Clock.Stop(clock); 
 | 
        } 
 | 
        clock = null; 
 | 
  
 | 
        base.OnExit(); 
 | 
    } 
 | 
  
 | 
    private void DetectConnected(int _seconds) 
 | 
    { 
 | 
        connectedDetecting = true; 
 | 
  
 | 
        var sendInfo1 = new C0104_tagCOnlineReturn(); 
 | 
        sendInfo1.Type = 0; 
 | 
        GameNetSystem.Instance.SendInfo(sendInfo1);// 在线回应 
 | 
  
 | 
        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(); 
 | 
                    UIManager.Instance.OpenWindow<DisconnectHintWin>(); 
 | 
                    break; 
 | 
                case NetworkReachability.ReachableViaCarrierDataNetwork: 
 | 
                case NetworkReachability.ReachableViaLocalAreaNetwork: 
 | 
                    GameNetSystem.Instance.Reconnect(); 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void OnApplicationPause(bool pause) 
 | 
    { 
 | 
        if (GameNetSystem.Instance.netState != GameNetSystem.NetState.Connected) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        if (!pause) 
 | 
        { 
 | 
            DetectConnected(3); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |