QSBNetworkManager.cs: proper transport error

This commit is contained in:
JohnCorby 2023-05-07 18:14:49 -07:00
parent 38f653ef3c
commit a89c325c88
4 changed files with 22 additions and 33 deletions

View File

@ -40,9 +40,6 @@ namespace EpicTransport {
public ProductUserId productUserId;
private int packetId = 0;
// CHANGED
public Action<string> SetTransportError;
private void Awake() {
Debug.Assert(Channels != null && Channels.Length > 0, "No channel configured for EOS Transport.");

View File

@ -1,4 +1,5 @@
using EpicTransport;
using Mirror;
using OWML.Common;
using QSB.Localization;
using QSB.Messaging;
@ -716,7 +717,7 @@ internal class MenuManager : MonoBehaviour, IAddComponentOnStart
OpenInfoPopup(string.Format(QSBLocalization.Current.ServerRefusedConnection, reason), QSBLocalization.Current.OK);
}
private void OnDisconnected(string error)
private void OnDisconnected(TransportError error, string reason)
{
QSBCore.IsInMultiplayer = false;
@ -735,7 +736,7 @@ internal class MenuManager : MonoBehaviour, IAddComponentOnStart
}
};
OpenInfoPopup(string.Format(QSBLocalization.Current.ClientDisconnectWithError, error), QSBLocalization.Current.OK);
OpenInfoPopup(string.Format(QSBLocalization.Current.ClientDisconnectWithError, reason), QSBLocalization.Current.OK);
}
SetButtonActive(DisconnectButton, false);

View File

@ -45,7 +45,7 @@ public class QSBNetworkManager : NetworkManager, IAddComponentOnStart
public new static QSBNetworkManager singleton => (QSBNetworkManager)NetworkManager.singleton;
public event Action OnClientConnected;
public event Action<string> OnClientDisconnected;
public event Action<TransportError, string> OnClientDisconnected;
public GameObject OrbPrefab { get; private set; }
public GameObject ShipPrefab { get; private set; }
@ -65,12 +65,7 @@ public class QSBNetworkManager : NetworkManager, IAddComponentOnStart
private GameObject _probePrefab;
private bool _everConnected;
private string _lastTransportError;
private static readonly string[] _kcpErrorLogs =
{
"KcpPeer: received disconnect message",
"Failed to resolve host: .*"
};
private (TransportError error, string reason) _lastTransportError;
private static kcp2k.KcpTransport _kcpTransport;
private static EosTransport _eosTransport;
@ -99,7 +94,6 @@ public class QSBNetworkManager : NetworkManager, IAddComponentOnStart
eosSdkComponent.epicLoggerLevel = LogLevel.VeryVerbose;
_eosTransport = gameObject.AddComponent<EosTransport>();
_eosTransport.SetTransportError = error => _lastTransportError = error;
}
transport = QSBCore.UseKcpTransport ? _kcpTransport : _eosTransport;
@ -242,24 +236,14 @@ public class QSBNetworkManager : NetworkManager, IAddComponentOnStart
networkAddress = QSBCore.DefaultServerIP;
{
kcp2k.Log.Info = s =>
// hack
kcp2k.Log.Info += s =>
{
DebugLog.DebugWrite("[KCP] " + s);
if (_kcpErrorLogs.Any(p => Regex.IsMatch(s, p)))
if (s == "KcpPeer: received disconnect message")
{
_lastTransportError = s;
OnClientError(TransportError.ConnectionClosed, "host disconnected");
}
};
kcp2k.Log.Warning = s =>
{
DebugLog.DebugWrite("[KCP] " + s, MessageType.Warning);
_lastTransportError = s;
};
kcp2k.Log.Error = s =>
{
DebugLog.DebugWrite("[KCP] " + s, MessageType.Error);
_lastTransportError = s;
};
}
QSBSceneManager.OnPostSceneLoad += (_, loadScene) =>
@ -357,8 +341,8 @@ public class QSBNetworkManager : NetworkManager, IAddComponentOnStart
{
DebugLog.DebugWrite("OnClientDisconnect");
base.OnClientDisconnect();
OnClientDisconnected?.SafeInvoke(_lastTransportError);
_lastTransportError = null;
OnClientDisconnected?.SafeInvoke(_lastTransportError.error, _lastTransportError.reason);
_lastTransportError = default;
}
public override void OnServerDisconnect(NetworkConnectionToClient conn) // Called on the server when any client disconnects
@ -425,9 +409,15 @@ public class QSBNetworkManager : NetworkManager, IAddComponentOnStart
base.OnStopServer();
}
public override void OnServerError(NetworkConnectionToClient conn, TransportError error, string reason) =>
public override void OnServerError(NetworkConnectionToClient conn, TransportError error, string reason)
{
DebugLog.DebugWrite($"OnServerError({conn}, {error}, {reason})", MessageType.Error);
_lastTransportError = (error, reason);
}
public override void OnClientError(TransportError error, string reason) =>
public override void OnClientError(TransportError error, string reason)
{
DebugLog.DebugWrite($"OnClientError({error}, {reason})", MessageType.Error);
_lastTransportError = (error, reason);
}
}

View File

@ -1,4 +1,5 @@
using QSB.DeathSync.Messages;
using Mirror;
using QSB.DeathSync.Messages;
using QSB.Messaging;
using QSB.Patches;
using QSB.Player;
@ -48,7 +49,7 @@ internal class RespawnManager : MonoBehaviour, IAddComponentOnStart
}
}
private void OnDisconnected(string error)
private void OnDisconnected(TransportError error, string reason)
{
_owRecoveryPoint?.SetActive(true);
_qsbRecoveryPoint?.SetActive(false);