92 lines
2.1 KiB
C#
92 lines
2.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
using UnityEngine.Networking;
|
|
|
|
public class NetworkManager : MonoBehaviour
|
|
{
|
|
|
|
[SerializeField]
|
|
private float responseTimeThreshold = 1.0f;
|
|
[SerializeField]
|
|
private string checkUrl = "https://www.google.com";
|
|
private float responseTime;
|
|
private Coroutine checkInternetConnectivityCoroutine;
|
|
private bool isOnline = false;
|
|
public bool IsOnline
|
|
{
|
|
get
|
|
{
|
|
return isOnline;
|
|
}
|
|
}
|
|
|
|
public UnityAction<bool> OnNetworkOnline;
|
|
|
|
void Awake()
|
|
{
|
|
responseTime = 0.0f;
|
|
checkInternetConnectivityCoroutine = null;
|
|
isOnline = false;
|
|
|
|
CheckNetwork();
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
CheckNetwork();
|
|
}
|
|
|
|
private void CheckNetwork()
|
|
{
|
|
if (Application.internetReachability != NetworkReachability.NotReachable)
|
|
{
|
|
if (isOnline == false && checkInternetConnectivityCoroutine == null)
|
|
{
|
|
checkInternetConnectivityCoroutine = StartCoroutine(CheckInternetConnectivity());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (isOnline)
|
|
{
|
|
OnNetworkOnline?.Invoke(false);
|
|
}
|
|
isOnline = false;
|
|
}
|
|
}
|
|
|
|
IEnumerator CheckInternetConnectivity()
|
|
{
|
|
float startTime = Time.time;
|
|
|
|
using (UnityWebRequest www = UnityWebRequest.Get(checkUrl))
|
|
{
|
|
yield return www.SendWebRequest();
|
|
|
|
responseTime = Time.time - startTime;
|
|
if (www.result == UnityWebRequest.Result.Success && responseTime < responseTimeThreshold)
|
|
{
|
|
isOnline = true;
|
|
}
|
|
else
|
|
{
|
|
isOnline = false;
|
|
}
|
|
|
|
checkInternetConnectivityCoroutine = null;
|
|
OnNetworkOnline?.Invoke(isOnline);
|
|
}
|
|
|
|
if (Time.time - startTime > responseTimeThreshold)
|
|
{
|
|
checkInternetConnectivityCoroutine = null;
|
|
isOnline = false;
|
|
OnNetworkOnline?.Invoke(false);
|
|
|
|
yield break;
|
|
}
|
|
}
|
|
}
|