mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 19:10:32 +00:00
3e1eb7998d
* feat(Transport): Reimplement Transport Exception Actions * Fixed Script Templates * fix: Updated Network Transform Template * fix(NetworkIdentity): Separate ResetState (#3742) * fix(NetworkTransform): Separate ResetState We should not have hijacked Unity's callback for runtime resets. * Rename test too * fix(InterestManagement): Separate ResetState (#3743) * fix(InterestManagement): Separate ResetState We should not have hijacked Unity's callback for runtime resets. * Updated Template * feat(NetworkTransform): Default Sync Direction = Client To Server (#3741) * feat(NetworkTransform): Default Sync Direction = Client To Server - This is done in Reset so Network Behaviour isn't effected. - This will not change NT components already in place on objects / prefabs unless user manually chooses Reset in the inspector. * Update Assets/Mirror/Components/NetworkTransform/NetworkTransformBase.cs --------- Co-authored-by: mischa <16416509+miwarnec@users.noreply.github.com> * Prediction: detect renderers in children * Add missing replace handler override to NetworkServer (#3744) * perf(BenchmarkIdle Example): Lowered spawn amount to 10k (#3745) 50k causes a long delay, and looks like Unity has initially frozen, even on beefy machines. To prevent users from thinking this, and perhaps force closing, amount is lowered to something still crazy, but more reasonable. :) - Nothing else has been touched * fix(Room Example): Updated Reward Script - Added Headers - made `available` private with ReadOnly * feat(NetworkClient): Add ReplaceHandler with channel param (#3747) * breaking(NetworkClient): Remove NetworkConnection parameter from ReplaceHandler There is only one connection on client. Aligns with RegisterHandler that takes no NetworkConnection parameter. * feat(NetworkClient): Add ReplaceHandler with channel param * breaking(NetworkIdentity): Rename visible to visibility (#3748) * breaking(NetworkIdentity): Rename visible to visibility * Remove TODO comment * Prediction: physics copy now has the correct layer assigned to fix predicted objects falling through the ground in games which use custom physics collision matrix * Update Readme: prediction status * fix(MirrorBenchmarkIdle): Spawn Amount Correction * Prediction: disable log spam * Prediction: fix wrong null check * Prediction: catch errors * Prediction: catch errors early * chore(CI): RunUnityTests - updated unityVersions * fix(Prediction): fix MoveColliders not copying isTrigger * Prediction: make Move.* functions static for reuse later * Prediction: MoveAllColliders helper for reuse * fix(Prediction): now supports interest management by moving physics copy's components back onto self before destroying the physics copy * Prediction: now supports colliders on children * comments * fix(Prediction): when copying child Colliders, copy their relative position/rotation/scale too * fix(Prediction): child colliders now have the correct layer too * oops * Prediction: move GameObject/MonoBehaviour copying code into PredicitonUtils.cs * Prediction: MovePhysicsComponents helper function * Prediction: comments * Prediction: collider materials are now copied too * feat(SyncVar): Arrays are supported (#3750) * feat(SyncVar): Arrays are supported * Moved and revised SyncVarsCantBeArray test - Now named SyncVarsCanBeArray - thisShouldntWork renamed to thisShouldWork * Prediction: support all Joints * Prediction: add support for predicted objects which are children of parents with non-default scale * perf(Team Interest Mgmt): Complete Overhaul (#3730) * WIP * perf(Team Interest Mgmt) Use Dictionary instead of spawned This is better than iterating all spawned objects and doing TryGetComponent in Update. * TeamIntMgmt WIP * NetworkTeam SerializeField, no SyncVar * Fixed Tooltip * Removed SyncVar on forceShown * Fixed issues per review * Fixed comments and naming * Remove ReadOnly * PredictionUtils: Fixed pre-Unity 2022.3 errors * PredictionUtils: Fixed pre-Unity 2020.3 errors * chore(CI): RunUnityTests - updated unityVersion * NetworkBehaviour: Improved comments * Edgegap Hosting: updated to latest version for fixes and Websocket support * PredictedRigidbody: improve logging * Add network messages to lookup dict in network server replace handler (#3753) * Add network mesages to lookup dict in network client replace handler (#3754) * Prediction: rename DestroyCopies to DestroyGhosts for consistency * syntax * perf(Prediction): cache .transform getter because this is performance critical * perf(Prediction): optimize LateUpdate because this shows in profiler! deep profiling: 93 objects, before=0.54ms, after=0.22ms => 2.5x faster! * perf(Prediction): optimize ghosts. deep profiling: 93 objects before=0.08ms after =0.03ms! * chore: RunUnityTest - upload-artifact@v4 * chore(CI): Semantic.yml - use v4 of github actions * fix(MultiplexTransport): Better Startup Logging * perf(PredictedRigidbody): next round of optimizations * perf(Extensions): Add shim for transform.GetPositionAndRotation (#3755) Doesn't exist in unity versions 2021.2 or earlier * ThreadLog: more obvious prefix! * fix(MultiplexTransport): Fixed log output * KcpTransport: fixed ToString to match other transports * fix typos * fix(MultiplexTransport): Use TryGetValue for Lookups (#3758) * NetworkManager: fixed comment * Prediction: warn about not readable meshes * NetworkTime: SendPing method added. * fix(NetworkClient): Call NetworkTime.SendPing from OnTransportConnected (#3686) * fix: fixing time not being sent on connect client does not send ping if connecting to server within 2 seconds of starting, the new PingNow function will tell client to send the message right away instead of after lastPingTime+PingInterval * Update Assets/Mirror/Core/NetworkTime.cs * Update Assets/Mirror/Core/NetworkTime.cs * Update Assets/Mirror/Core/NetworkClient.cs * Update Assets/Mirror/Core/NetworkTime.cs --------- Co-authored-by: MrGadget <9826063+MrGadget1024@users.noreply.github.com> * SyncDictionary: Fixed typo in comment * feat: NT-UR bit flag changed detection to lower bandwidth usage. (#3721) * feat: NT-UR bit flag changed detection to lower bandwidth usage. Also major credits to our Ninja. * Tooltip updated * fix: NT-Unreliable Quaternion Compression Fix Credits to ninja of course :D * NT-U new improvements Credits to Ninja * Nothing to see here.. * Added comment to Quat Rotation Fix * Sensitivity check to improve value comparisons. Without this, X 0 and X -4.955753E-07 (0) would trigger as a change of value. Helps epsilon/floating point inaccuracies. * Moved around checks. rotationChanged not needed now for non-compressed bool, as we check individual rotation sensitivity changes. We can move this inside quat compress check. * Use Rot/All, not just RotX as a compress changed flag. * Set Just Rot. * Updated Reset to ResetState * Fixing PR 3571/3572/3572 in this new bitflag branch --------- Co-authored-by: ninjakickja <80569286+ninjakickja@users.noreply.github.com> * fix(NetworkManager): FinishStartHost-Don't force localhost (#3759) * perf(PredictedRigidbody): only record state if changed(!) * perf(PredictedRigidbody): reduce sends to 1 Hz while idle(!) * Prediction: expose physics copy components to inheriting classes * fix(PredictedRigidbody): only show 'hard correcting because too old' warning if older than entire state history limit. not when starting to record only 2-3 entries yet. * fix(PredictedRigidbody): fix host mode [FakeByte] * perf(PredictedRigidbody): OnSerialize faster * breaking: perf: change NB.syncVarDirtyBits to field (#3762) @miwarnec saw the property showing up while profiling. Very much unnecessary, so lets change that to a field. BREAKING: Changed NetworkBehaviour.syncVarDirtyBits from a "get-only" property to a field * feat(NetworkAnimator): Default Sync Direction = Client To Server - This is done in Reset so Network Behaviour isn't effected. - This will not change NA components already in place on objects / prefabs unless user manually chooses Reset in the inspector. * chore(CI): RunUnityTests - updated unityVersions * chore(CI): RunUnityTests - updated unityVersion * chore(CI): RunUnityTests - updated unityVersion * fix(SWT): Improved logging in ClientHandshake - Added hint to check Server Roles for handshake key mismatches * feat(NetworkRigidbody): Default Sync Direction = Client To Server (#3764) - This is done in Reset so Network Behaviour isn't effected. - This will not change components already in place on objects / prefabs unless user manually chooses Reset in the inspector. * PredictedRigidbody: add OnBeforeApplyState callback * doc(ReadMe): Fixed sponsor link * CanvasNetworkManagerHUD: fixed indent * perf(Prediction): ghosts-on-demand(!) * Prediction: sync angularVelocity too * Prediction: better motion smoothing time * Prediction: only set velocity if not kinematic * Prediction: sync delta rotations too [FakeByte] * fix(PredictedRigidbody): reduce-send-rate considers angular velocity now too! * fix(Prediction): ConfigurableJoints' range of motion is now moved correctly * fix: Safer version for FindAnyObjectByType (#3765) Unity docs are a mess on when FindAnyObjectByType was implemented: - 2021.3 says it is - 2022.1 says it's not - 2022.2 says it is * chore(CI): RunUnityTests - updated unityVersions * fix(Prediction): disable setting scale for joints since it causes issues with parenting * feat: LagCompensator as convenience component that wraps all the Lag Compensation logic * Update README.md * LagCompensator: rename collider field to be more obvious in Inspector * LagCompensator: preview notice * refactor: NetworkServer DestroyObject(DestroyMode) logic moved to Unspawn() + Destroy to remove the DestroyMode parameter * fix: NetworkServer.Destroy never destroys scene objects anymore since unlike prefabs, once they are gone we can never instantiate them again (#3771) * fix: NetworkServer.Spawn now activates inactive GameObjects (for example, in case they were previously Unspawned) * chore(CI): RunUnityTests - updated unityVersion * Upgrade to Unity 2021.3.35 LTS * MIRROR_88_OR_NEWER * feat: EncryptionTransport (#3768) * initial working transport * code cleanup & transport wrap tests * better connection tests * Handle bouncycastle exceptions * clean up usings * Mirror icon :) * list to allow for removing entries during loop * Profiler sampling * Unity 2019 compat * code style * pubkey validation * use builtin aes engine selector this is overly optimistic, as the hardware accelerated engine is only available on .net core 3 or higher * Older unity version fix * fix: EncryptionTransport uses KDF to ensure fixed size key (#3773) * reset _time * fix: EncryptionTransport use KDF to ensure fixed size key * Expose pub key through transport * Old Unity compat * breaking: Asset Store Release BREAKING CHANGE: Asset Store Release * Removed empty folder meta * chore: EncryptionTransport help url (#3774) * fix: NetworkServer.Destroy now warns instead of throwing for null objects again * fix: NetworkServer.OnCommandMessage NullReferenceException due to log message accessing a guaranteed-to-be-null value * feat(Transport): IsEncrypted, EncryptionCipher virtuals * feat: EncryptionTransport overrides IsEncrypted & Cipher (#3776) * feat: SWT overrides Transport.IsEncrypted & EncryptionCipher (#3777) TLS isn't technically correct, but there's no good way to get that info * SimpleWebTransport: moved overrides down * fix: #2503 Weaver Custom Read Write functions for Serialization not working over multiple assembly definitions * chore(CI): RunUnityTests - updated unityVersion * fix: EdgegapKcp StopHost() null reference exception (#3779) see https://github.com/MirrorNetworking/Mirror/issues/3708 * fix(ILPostProcessorAssemblyResolver): Ignore Bee.BeeDriver - There is now BeeDriver2, so using StartsWith * PredictedRigidbody: make .predictedRigidbody accessible to other components! * Examples: Prediction Benchmark with readme & current results * readme changed from .txt to .md for formatting * Prediction: syntax * chore(CI): RunUnityTests - updated unityVersions * PredictedRigidbody: OnDeserialize parsing grouped together (syntax change) * PredictedRigidbody: syntax * perf: PredictedRigidbody doesn't log hard correction when ahead anymore * perf: Prediction.Sample() removed SortedList foreach iteration allocations(!) * perf: PredictedRigidbody doesn't log "Separating Physics" anymore * PredictedSyncData struct first step: same reads & writes * perf: PredictedRigidbody syncs a blittable struct once instead of doing 5 separate reads/writes * perf: PredictedRigidbody caches IsMoving sqr computations * inlining * perf: PredictedRigidbody FixedUpdate caches sqr computations * perf: PredictedRigidbody RecordState only calls NetworkTime.time getter once * perf: PredictedRigidbody state properties inlined * perf: PredictedRigidbody RecordState only grabs count once * prediction benchmark updated * perf: PredictedRigidbody UpdateGhosting: only every few frames * perf: PredictedRigidbody caches physics transform to use GetPositionAndRotation * ProjectSettings resaved with current Unity version * PredictedRigidbody: update hard follow commented code * perf: PredictedRigidbody smoothFollowThreshold squared caching * perf: PredictedRigidbody MoveTowardsCustom * perf: PredictedRigidbody MoveTowardsCustom: only calculate distance factor once * Prediction: RingBuffer perf comments * feat: Edgegap Lobby Transport & Demo (#3780) * feat: Edgegap Lobby Transport & Example * Code Cleanup * Rename data -> models * Remove debug logs * Log errors as OnClient/ServerError dont always log * Only show joinable lobbies * naming * Transport help url * old unity compat * Unity 2020 compat as well * Readme * lobby name is required + correct placeholder * Update lobby ui prefab too * Lobby creation ui tweaks * lobby url tooltip tweak * Remove test lobby url * chore: old unity compat for PredictedRigidbody (#3781) * fix(EdgegapLobbyKcpTransport): Fixed HelpURL * EncryptionTransportInspector: Fixed button label * fix: Edgegap Lobby Create UI Tweaks (#3782) * chore: Edgegap Lobby Create UI Tweaks * 3 loading dots * help urls --------- Co-authored-by: mischa <16416509+miwarnec@users.noreply.github.com> Co-authored-by: mischa <info@noobtuts.com> Co-authored-by: Justin Nolan <justin@nolan.de> Co-authored-by: JesusLuvsYooh <57072365+JesusLuvsYooh@users.noreply.github.com> Co-authored-by: Robin Rolf <imer@imer.cc> Co-authored-by: James Frowen <jamesfrowendev@gmail.com> Co-authored-by: ninjakickja <80569286+ninjakickja@users.noreply.github.com> Co-authored-by: mischa <16416509+vis2k@users.noreply.github.com>
366 lines
13 KiB
Plaintext
366 lines
13 KiB
Plaintext
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using Mirror;
|
|
|
|
/*
|
|
Documentation: https://mirror-networking.gitbook.io/docs/components/network-manager
|
|
API Reference: https://mirror-networking.com/docs/api/Mirror.NetworkManager.html
|
|
*/
|
|
|
|
public class #SCRIPTNAME# : NetworkManager
|
|
{
|
|
// You can adjust the parameters of the Actions below to suit your needs and pass the values through the Invoke() method.
|
|
|
|
public event Action OnStartAction;
|
|
public event Action OnDestroyAction;
|
|
|
|
public event Action OnApplicationQuitAction;
|
|
|
|
public event Action<string> ServerChangeSceneAction;
|
|
public event Action<string> OnServerChangeSceneAction;
|
|
public event Action<string> OnServerSceneChangedAction;
|
|
public event Action<string, SceneOperation, bool> OnClientChangeSceneAction;
|
|
public event Action OnClientSceneChangedAction;
|
|
|
|
public event Action<NetworkConnectionToClient> OnServerConnectAction;
|
|
public event Action<NetworkConnectionToClient> OnServerReadyAction;
|
|
public event Action<NetworkConnectionToClient> OnServerAddPlayerAction;
|
|
public event Action<NetworkConnectionToClient> OnServerDisconnectAction;
|
|
public event Action<NetworkConnectionToClient, TransportError, string> OnServerErrorAction;
|
|
public event Action<NetworkConnectionToClient, Exception> OnServerTransportExceptionAction;
|
|
|
|
public event Action OnClientConnectAction;
|
|
public event Action OnClientDisconnectAction;
|
|
public event Action OnClientNotReadyAction;
|
|
public event Action<TransportError, string> OnClientErrorAction;
|
|
public event Action<Exception> OnClientTransportExceptionAction;
|
|
|
|
public event Action OnStartServerAction;
|
|
public event Action OnStopServerAction;
|
|
public event Action OnStartHostAction;
|
|
public event Action OnStopHostAction;
|
|
public event Action OnStartClientAction;
|
|
public event Action OnStopClientAction;
|
|
|
|
// Overrides the base singleton so we don't have to cast to this type everywhere.
|
|
public static new #SCRIPTNAME# singleton => (#SCRIPTNAME#)NetworkManager.singleton;
|
|
|
|
/// <summary>
|
|
/// Runs on both Server and Client
|
|
/// Networking is NOT initialized when this fires
|
|
/// </summary>
|
|
public override void Awake()
|
|
{
|
|
base.Awake();
|
|
|
|
// Example of adding a handler for the OnStartAction
|
|
// Multiple handlers can be added for actions
|
|
// Use -= to remove handlers
|
|
// Set the action to null to remove all handlers
|
|
OnStartAction += OnStartedActionHandler;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Example handler for OnStartAction
|
|
/// </summary>
|
|
/// <remarks>Handlers can be assigned from, and exist, in any script</remarks>
|
|
public void OnStartedActionHandler()
|
|
{
|
|
Debug.Log("#SCRIPTNAME#.OnStartAction invoked");
|
|
}
|
|
|
|
#region Unity Callbacks
|
|
|
|
public override void OnValidate()
|
|
{
|
|
base.OnValidate();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Runs on both Server and Client
|
|
/// Networking is NOT initialized when this fires
|
|
/// </summary>
|
|
public override void Start()
|
|
{
|
|
OnStartAction?.Invoke();
|
|
base.Start();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Runs on both Server and Client
|
|
/// </summary>
|
|
public override void LateUpdate()
|
|
{
|
|
base.LateUpdate();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Runs on both Server and Client
|
|
/// </summary>
|
|
public override void OnDestroy()
|
|
{
|
|
OnDestroyAction?.Invoke();
|
|
base.OnDestroy();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Start & Stop
|
|
|
|
/// <summary>
|
|
/// Set the frame rate for a headless server.
|
|
/// <para>Override if you wish to disable the behavior or set your own tick rate.</para>
|
|
/// </summary>
|
|
public override void ConfigureHeadlessFrameRate()
|
|
{
|
|
base.ConfigureHeadlessFrameRate();
|
|
}
|
|
|
|
/// <summary>
|
|
/// called when quitting the application by closing the window / pressing stop in the editor
|
|
/// </summary>
|
|
public override void OnApplicationQuit()
|
|
{
|
|
OnApplicationQuitAction?.Invoke();
|
|
base.OnApplicationQuit();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Scene Management
|
|
|
|
/// <summary>
|
|
/// This causes the server to switch scenes and sets the networkSceneName.
|
|
/// <para>Clients that connect to this server will automatically switch to this scene. This is called automatically if onlineScene or offlineScene are set, but it can be called from user code to switch scenes again while the game is in progress. This automatically sets clients to be not-ready. The clients must call NetworkClient.Ready() again to participate in the new scene.</para>
|
|
/// </summary>
|
|
/// <param name="newSceneName"></param>
|
|
public override void ServerChangeScene(string newSceneName)
|
|
{
|
|
ServerChangeSceneAction?.Invoke(newSceneName);
|
|
base.ServerChangeScene(newSceneName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called from ServerChangeScene immediately before SceneManager.LoadSceneAsync is executed
|
|
/// <para>This allows server to do work / cleanup / prep before the scene changes.</para>
|
|
/// </summary>
|
|
/// <param name="newSceneName">Name of the scene that's about to be loaded</param>
|
|
public override void OnServerChangeScene(string newSceneName)
|
|
{
|
|
OnServerChangeSceneAction?.Invoke(newSceneName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on the server when a scene is completed loaded, when the scene load was initiated by the server with ServerChangeScene().
|
|
/// </summary>
|
|
/// <param name="sceneName">The name of the new scene.</param>
|
|
public override void OnServerSceneChanged(string sceneName)
|
|
{
|
|
OnServerSceneChangedAction?.Invoke(sceneName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called from ClientChangeScene immediately before SceneManager.LoadSceneAsync is executed
|
|
/// <para>This allows client to do work / cleanup / prep before the scene changes.</para>
|
|
/// </summary>
|
|
/// <param name="newSceneName">Name of the scene that's about to be loaded</param>
|
|
/// <param name="sceneOperation">Scene operation that's about to happen</param>
|
|
/// <param name="customHandling">true to indicate that scene loading will be handled through overrides</param>
|
|
public override void OnClientChangeScene(string newSceneName, SceneOperation sceneOperation, bool customHandling)
|
|
{
|
|
OnClientChangeSceneAction?.Invoke(newSceneName, sceneOperation, customHandling);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on clients when a scene has completed loaded, when the scene load was initiated by the server.
|
|
/// <para>Scene changes can cause player objects to be destroyed. The default implementation of OnClientSceneChanged in the NetworkManager is to add a player object for the connection if no player object exists.</para>
|
|
/// </summary>
|
|
public override void OnClientSceneChanged()
|
|
{
|
|
OnClientSceneChangedAction?.Invoke();
|
|
base.OnClientSceneChanged();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Server System Callbacks
|
|
|
|
/// <summary>
|
|
/// Called on the server when a new client connects.
|
|
/// <para>Unity calls this on the Server when a Client connects to the Server. Use an override to tell the NetworkManager what to do when a client connects to the server.</para>
|
|
/// </summary>
|
|
/// <param name="conn">Connection from client.</param>
|
|
public override void OnServerConnect(NetworkConnectionToClient conn)
|
|
{
|
|
OnServerConnectAction?.Invoke(conn);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on the server when a client is ready.
|
|
/// <para>The default implementation of this function calls NetworkServer.SetClientReady() to continue the network setup process.</para>
|
|
/// </summary>
|
|
/// <param name="conn">Connection from client.</param>
|
|
public override void OnServerReady(NetworkConnectionToClient conn)
|
|
{
|
|
OnServerReadyAction?.Invoke(conn);
|
|
base.OnServerReady(conn);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on the server when a client adds a new player with ClientScene.AddPlayer.
|
|
/// <para>The default implementation for this function creates a new player object from the playerPrefab.</para>
|
|
/// </summary>
|
|
/// <param name="conn">Connection from client.</param>
|
|
public override void OnServerAddPlayer(NetworkConnectionToClient conn)
|
|
{
|
|
OnServerAddPlayerAction?.Invoke(conn);
|
|
base.OnServerAddPlayer(conn);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on the server when a client disconnects.
|
|
/// <para>This is called on the Server when a Client disconnects from the Server. Use an override to decide what should happen when a disconnection is detected.</para>
|
|
/// </summary>
|
|
/// <param name="conn">Connection from client.</param>
|
|
public override void OnServerDisconnect(NetworkConnectionToClient conn)
|
|
{
|
|
OnServerDisconnectAction?.Invoke(conn);
|
|
base.OnServerDisconnect(conn);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on server when transport raises an error.
|
|
/// <para>NetworkConnection may be null.</para>
|
|
/// </summary>
|
|
/// <param name="conn">Connection of the client...may be null</param>
|
|
/// <param name="transportError">TransportError enum</param>
|
|
/// <param name="message">String message of the error.</param>
|
|
public override void OnServerError(NetworkConnectionToClient conn, TransportError transportError, string message)
|
|
{
|
|
OnServerErrorAction?.Invoke(conn, transportError, message);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on server when transport raises an exception.
|
|
/// <para>NetworkConnection may be null.</para>
|
|
/// </summary>
|
|
/// <param name="conn">Connection of the client...may be null</param>
|
|
/// <param name="exception">Exception thrown from the Transport.</param>
|
|
public override void OnServerTransportException(NetworkConnectionToClient conn, Exception exception)
|
|
{
|
|
OnServerTransportExceptionAction?.Invoke(conn, exception);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Client System Callbacks
|
|
|
|
/// <summary>
|
|
/// Called on the client when connected to a server.
|
|
/// <para>The default implementation of this function sets the client as ready and adds a player. Override the function to dictate what happens when the client connects.</para>
|
|
/// </summary>
|
|
public override void OnClientConnect()
|
|
{
|
|
OnClientConnectAction?.Invoke();
|
|
base.OnClientConnect();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on clients when disconnected from a server.
|
|
/// <para>This is called on the client when it disconnects from the server. Override this function to decide what happens when the client disconnects.</para>
|
|
/// </summary>
|
|
public override void OnClientDisconnect()
|
|
{
|
|
OnClientDisconnectAction?.Invoke();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on clients when a servers tells the client it is no longer ready.
|
|
/// <para>This is commonly used when switching scenes.</para>
|
|
/// </summary>
|
|
public override void OnClientNotReady()
|
|
{
|
|
OnClientNotReadyAction?.Invoke();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on client when transport raises an error.</summary>
|
|
/// </summary>
|
|
/// <param name="transportError">TransportError enum.</param>
|
|
/// <param name="message">String message of the error.</param>
|
|
public override void OnClientError(TransportError transportError, string message)
|
|
{
|
|
OnClientErrorAction?.Invoke(transportError, message);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called on client when transport raises an exception.</summary>
|
|
/// </summary>
|
|
/// <param name="exception">Exception thrown from the Transport.</param>
|
|
public override void OnClientTransportException(Exception exception)
|
|
{
|
|
OnClientTransportExceptionAction?.Invoke(exception);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Start & Stop Callbacks
|
|
|
|
// Since there are multiple versions of StartServer, StartClient and StartHost, to reliably customize
|
|
// their functionality, users would need override all the versions. Instead these callbacks are invoked
|
|
// from all versions, so users only need to implement this one case.
|
|
|
|
/// <summary>
|
|
/// This is invoked when a server is started - including when a host is started.
|
|
/// <para>StartServer has multiple signatures, but they all cause this hook to be called.</para>
|
|
/// </summary>
|
|
public override void OnStartServer()
|
|
{
|
|
OnStartServerAction?.Invoke();
|
|
}
|
|
|
|
/// <summary>
|
|
/// This is called when a server is stopped - including when a host is stopped.
|
|
/// </summary>
|
|
public override void OnStopServer()
|
|
{
|
|
OnStopServerAction?.Invoke();
|
|
}
|
|
|
|
/// <summary>
|
|
/// This is invoked when a host is started.
|
|
/// <para>StartHost has multiple signatures, but they all cause this hook to be called.</para>
|
|
/// </summary>
|
|
public override void OnStartHost()
|
|
{
|
|
OnStartHostAction?.Invoke();
|
|
}
|
|
|
|
/// <summary>
|
|
/// This is called when a host is stopped.
|
|
/// </summary>
|
|
public override void OnStopHost()
|
|
{
|
|
OnStopHostAction?.Invoke();
|
|
}
|
|
|
|
/// <summary>
|
|
/// This is invoked when the client is started.
|
|
/// </summary>
|
|
public override void OnStartClient()
|
|
{
|
|
OnStartClientAction?.Invoke();
|
|
}
|
|
|
|
/// <summary>
|
|
/// This is called when a client is stopped.
|
|
/// </summary>
|
|
public override void OnStopClient()
|
|
{
|
|
OnStopClientAction?.Invoke();
|
|
}
|
|
|
|
#endregion
|
|
}
|