TimeoutAuthenticator.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System.Collections;
  2. using UnityEngine;
  3. namespace Mirror.Authenticators
  4. {
  5. /// <summary>
  6. /// An authenticator that disconnects connections if they don't
  7. /// authenticate within a specified time limit.
  8. /// </summary>
  9. [AddComponentMenu("Network/Authenticators/TimeoutAuthenticator")]
  10. public class TimeoutAuthenticator : NetworkAuthenticator
  11. {
  12. public NetworkAuthenticator authenticator;
  13. [Range(0, 600), Tooltip("Timeout to auto-disconnect in seconds. Set to 0 for no timeout.")]
  14. public float timeout = 60;
  15. public void Awake()
  16. {
  17. authenticator.OnServerAuthenticated.AddListener(connection => OnServerAuthenticated.Invoke(connection));
  18. authenticator.OnClientAuthenticated.AddListener(connection => OnClientAuthenticated.Invoke(connection));
  19. }
  20. public override void OnStartServer()
  21. {
  22. authenticator.OnStartServer();
  23. }
  24. public override void OnStopServer()
  25. {
  26. authenticator.OnStopServer();
  27. }
  28. public override void OnStartClient()
  29. {
  30. authenticator.OnStartClient();
  31. }
  32. public override void OnStopClient()
  33. {
  34. authenticator.OnStopClient();
  35. }
  36. public override void OnServerAuthenticate(NetworkConnection conn)
  37. {
  38. authenticator.OnServerAuthenticate(conn);
  39. if (timeout > 0)
  40. StartCoroutine(BeginAuthentication(conn));
  41. }
  42. public override void OnClientAuthenticate()
  43. {
  44. authenticator.OnClientAuthenticate();
  45. if (timeout > 0)
  46. StartCoroutine(BeginAuthentication(NetworkClient.connection));
  47. }
  48. IEnumerator BeginAuthentication(NetworkConnection conn)
  49. {
  50. // Debug.Log($"Authentication countdown started {conn} {timeout}");
  51. yield return new WaitForSecondsRealtime(timeout);
  52. if (!conn.isAuthenticated)
  53. {
  54. // Debug.Log($"Authentication Timeout {conn}");
  55. conn.Disconnect();
  56. }
  57. }
  58. }
  59. }