58 lines
1.8 KiB
C#
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
|