RandomGFGoStop/Assets/Scripts/SingletonManagers/Managers/NetworkManager.cs

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;
}
}
}