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
|
|| (GameNetSystem.Instance.crossServerConnected_Loigc && GameNetSystem.Instance.timeSinceCrossServerSocketLastProtocol > OVERTIME_THRESHOLD))
|
{
|
DetectConnected(3);
|
}
|
else if (!GameNetSystem.Instance.mainSocketConnected
|
|| (GameNetSystem.Instance.crossServerConnected_Loigc && !GameNetSystem.Instance.crossServerSocketConnected))
|
{
|
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 (GameNetSystem.Instance.crossServerConnected_Loigc)
|
// {
|
// var sendInfo2 = new C0104_tagCOnlineReturn();
|
// sendInfo2.Type = 0;
|
// GameNetSystem.Instance.SendToCrossServer(sendInfo2);// 在线回应
|
// }
|
|
// 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 (GameNetSystem.Instance.crossServerConnected_Loigc)
|
{
|
#if UNITY_IOS && !UNITY_EDITOR
|
isDisconnected = isDisconnected || GameNetSystem.Instance.timeSinceCrossServerSocketLastProtocol > 3f;
|
#else
|
isDisconnected = isDisconnected || !GameNetSystem.Instance.crossServerSocketConnected
|
|| GameNetSystem.Instance.timeSinceCrossServerSocketLastProtocol > 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.Connected)
|
{
|
return;
|
}
|
|
if (!pause)
|
{
|
DetectConnected(3);
|
}
|
}
|
|
}
|