using System;
using Cute;

public class NetworkStatus : IDisposable
{
	public enum Status
	{
		None,
		Alive,
		Disconnect,
		OffLine,
		TimeOut
	}

	public Action OnAlive;

	public Action OnDisconnect;

	public Action OnOffLine;

	public Action OnTimeOut;

	public Status Current { get; private set; }

	public bool IsAlive => Current == Status.Alive;

	public NetworkStatus()
	{
		Current = Status.None;
	}

	public void ToKeepAlive()
	{
		OnAlive.Call();
		Current = Status.Alive;
	}

	public void ToDisconnect()
	{
		OnDisconnect.Call();
		Current = Status.Disconnect;
	}

	public void ToOffLine()
	{
		OnOffLine.Call();
		Current = Status.OffLine;
	}

	public void ToTimeOut()
	{
		OnTimeOut.Call();
		Current = Status.TimeOut;
	}

	public void Dispose()
	{
		OnAlive = null;
		OnDisconnect = null;
		OnOffLine = null;
		OnTimeOut = null;
	}
}
