12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- using System.Collections;
- using UnityEngine;
- namespace Mirror.Authenticators
- {
- /// <summary>
- /// An authenticator that disconnects connections if they don't
- /// authenticate within a specified time limit.
- /// </summary>
- [AddComponentMenu("Network/Authenticators/TimeoutAuthenticator")]
- public class TimeoutAuthenticator : NetworkAuthenticator
- {
- public NetworkAuthenticator authenticator;
- [Range(0, 600), Tooltip("Timeout to auto-disconnect in seconds. Set to 0 for no timeout.")]
- public float timeout = 60;
- public void Awake()
- {
- authenticator.OnServerAuthenticated.AddListener(connection => OnServerAuthenticated.Invoke(connection));
- authenticator.OnClientAuthenticated.AddListener(connection => OnClientAuthenticated.Invoke(connection));
- }
- public override void OnStartServer()
- {
- authenticator.OnStartServer();
- }
- public override void OnStopServer()
- {
- authenticator.OnStopServer();
- }
- public override void OnStartClient()
- {
- authenticator.OnStartClient();
- }
- public override void OnStopClient()
- {
- authenticator.OnStopClient();
- }
- public override void OnServerAuthenticate(NetworkConnection conn)
- {
- authenticator.OnServerAuthenticate(conn);
- if (timeout > 0)
- StartCoroutine(BeginAuthentication(conn));
- }
- public override void OnClientAuthenticate()
- {
- authenticator.OnClientAuthenticate();
- if (timeout > 0)
- StartCoroutine(BeginAuthentication(NetworkClient.connection));
- }
- IEnumerator BeginAuthentication(NetworkConnection conn)
- {
- // Debug.Log($"Authentication countdown started {conn} {timeout}");
- yield return new WaitForSecondsRealtime(timeout);
- if (!conn.isAuthenticated)
- {
- // Debug.Log($"Authentication Timeout {conn}");
- conn.Disconnect();
- }
- }
- }
- }
|