mirror of
https://github.com/smyalygames/monopoly.git
synced 2025-05-18 22:34:30 +02:00
102 lines
3.4 KiB
C#
102 lines
3.4 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
namespace Mirror
|
|
{
|
|
/// <summary>
|
|
/// Unity Event for the NetworkConnection
|
|
/// </summary>
|
|
[Serializable] public class UnityEventNetworkConnection : UnityEvent<NetworkConnection> { }
|
|
|
|
/// <summary>
|
|
/// Base class for implementing component-based authentication during the Connect phase
|
|
/// </summary>
|
|
[HelpURL("https://mirror-networking.com/docs/Guides/Authentication.html")]
|
|
public abstract class NetworkAuthenticator : MonoBehaviour
|
|
{
|
|
[Header("Event Listeners (optional)")]
|
|
|
|
/// <summary>
|
|
/// Notify subscribers on the server when a client is authenticated
|
|
/// </summary>
|
|
[Tooltip("Mirror has an internal subscriber to this event. You can add your own here.")]
|
|
public UnityEventNetworkConnection OnServerAuthenticated = new UnityEventNetworkConnection();
|
|
|
|
/// <summary>
|
|
/// Notify subscribers on the client when the client is authenticated
|
|
/// </summary>
|
|
[Tooltip("Mirror has an internal subscriber to this event. You can add your own here.")]
|
|
public UnityEventNetworkConnection OnClientAuthenticated = new UnityEventNetworkConnection();
|
|
|
|
#region server
|
|
|
|
/// <summary>
|
|
/// Called on server from StartServer to initialize the Authenticator
|
|
/// <para>Server message handlers should be registered in this method.</para>
|
|
/// </summary>
|
|
public virtual void OnStartServer() { }
|
|
|
|
/// <summary>
|
|
/// Called on server from OnServerAuthenticateInternal when a client needs to authenticate
|
|
/// </summary>
|
|
/// <param name="conn">Connection to client.</param>
|
|
public abstract void OnServerAuthenticate(NetworkConnection conn);
|
|
|
|
protected void ServerAccept(NetworkConnection conn)
|
|
{
|
|
OnServerAuthenticated.Invoke(conn);
|
|
}
|
|
|
|
protected void ServerReject(NetworkConnection conn)
|
|
{
|
|
conn.Disconnect();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region client
|
|
|
|
/// <summary>
|
|
/// Called on client from StartClient to initialize the Authenticator
|
|
/// <para>Client message handlers should be registered in this method.</para>
|
|
/// </summary>
|
|
public virtual void OnStartClient() { }
|
|
|
|
/// <summary>
|
|
/// Called on client from OnClientAuthenticateInternal when a client needs to authenticate
|
|
/// </summary>
|
|
/// <param name="conn">Connection of the client.</param>
|
|
public abstract void OnClientAuthenticate(NetworkConnection conn);
|
|
|
|
protected void ClientAccept(NetworkConnection conn)
|
|
{
|
|
OnClientAuthenticated.Invoke(conn);
|
|
}
|
|
|
|
protected void ClientReject(NetworkConnection conn)
|
|
{
|
|
// Set this on the client for local reference
|
|
conn.isAuthenticated = false;
|
|
|
|
// disconnect the client
|
|
conn.Disconnect();
|
|
}
|
|
|
|
#endregion
|
|
|
|
void OnValidate()
|
|
{
|
|
#if UNITY_EDITOR
|
|
// automatically assign authenticator field if we add this to NetworkManager
|
|
NetworkManager manager = GetComponent<NetworkManager>();
|
|
if (manager != null && manager.authenticator == null)
|
|
{
|
|
manager.authenticator = this;
|
|
UnityEditor.Undo.RecordObject(gameObject, "Assigned NetworkManager authenticator");
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
}
|