DotCloud/Assets/Plugins/LiteNetLib/PausedSocketFix.cs

58 lines
1.8 KiB
C#

#if UNITY_2018_3_OR_NEWER
using System.Net;
namespace LiteNetLib
{
public class PausedSocketFix
{
private readonly NetManager _netManager;
private readonly IPAddress _ipv4;
private readonly IPAddress _ipv6;
private readonly int _port;
private readonly bool _manualMode;
private bool _initialized;
public PausedSocketFix(NetManager netManager, IPAddress ipv4, IPAddress ipv6, int port, bool manualMode)
{
_netManager = netManager;
_ipv4 = ipv4;
_ipv6 = ipv6;
_port = port;
_manualMode = manualMode;
UnityEngine.Application.focusChanged += Application_focusChanged;
_initialized = true;
}
public void Deinitialize()
{
if (_initialized)
UnityEngine.Application.focusChanged -= Application_focusChanged;
_initialized = false;
}
private void Application_focusChanged(bool focused)
{
//If coming back into focus see if a reconnect is needed.
if (focused)
{
//try reconnect
if (!_initialized)
return;
//Was intentionally disconnected at some point.
if (!_netManager.IsRunning)
return;
//Socket is in working state.
if (_netManager.NotConnected == false)
return;
//Socket isn't running but should be. Try to start again.
if (!_netManager.Start(_ipv4, _ipv6, _port, _manualMode))
{
NetDebug.WriteError($"[S] Cannot restore connection. Ipv4 {_ipv4}, Ipv6 {_ipv6}, Port {_port}, ManualMode {_manualMode}");
}
}
}
}
}
#endif