Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

StopClient on server with host client kills the server #2954

Closed
MrGadget1024 opened this issue Sep 29, 2021 · 7 comments
Closed

StopClient on server with host client kills the server #2954

MrGadget1024 opened this issue Sep 29, 2021 · 7 comments
Assignees
Labels
bug Something isn't working

Comments

@MrGadget1024
Copy link
Collaborator

Describe the bug
Starting a server with Host client, then calling StopClient (with or without remote clients connected) should leave the server running normally. Connected clients should be able to continue playing, new clients should be able to join, even host client should be able to join back in with StartClient.

[IMPORTANT] How can we reproduce the issue, step by step:

  1. Modify NetworkManagerHUD as follows:
void StopButtons()
{
    // stop host if host mode
    if (NetworkServer.active && NetworkClient.isConnected)
    {
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Stop Host"))
        {
            manager.StopHost();
        }
        if (GUILayout.Button("Stop Client"))
        {
            manager.StopClient();
        }
        GUILayout.EndHorizontal();
    }
  1. Build Basic example and run as remote client
  2. Play in editor as host
  3. Click Stop Client button added in the change above
  4. Observe the remote client is disconnected

Expected behavior
Remote client should still be connected and functioning normally

@MrGadget1024 MrGadget1024 added enhancement New feature or request bug Something isn't working and removed enhancement New feature or request labels Sep 29, 2021
@miwarnec
Copy link
Collaborator

networkmanager has different ways to

  • start server
  • start host server

stopping has to be done the same way. if it was started as host, it needs to stopped as host - not only as client.

that's the way host mode always works, and the reason why Stop Client button is hidden in Network Manager HUD when in host mode - to make sure people use StopHost().

that being said, that's just UNET's overly complicated host mode.
redoing host mode in a more clean way with less 'special code' would solve this.

@miwarnec miwarnec added enhancement New feature or request and removed bug Something isn't working labels Mar 21, 2022
@miwarnec
Copy link
Collaborator

actually, we should probably add a check to StopClient to warn the user if called in host mode.

@miwarnec miwarnec added can't reproduce and removed enhancement New feature or request labels Mar 21, 2022
@miwarnec
Copy link
Collaborator

playing around with StopClient button.
starthost -> stopclient -> connecting external client still works fine:
https://gyazo.com/384b0ad16c47c756aadcb23e52543405

@miwarnec
Copy link
Collaborator

seems to be NetworkClient.Shutdown in NetMan.StopClient()
2022-03-22_02-14-27@2x

@miwarnec
Copy link
Collaborator

two issues in NetClient.Shutdown:

  • calls NetworkIdentity.ResetStaticis which resets nextNetId to 1. that would cause duplicate netIds on server when next client connects
  • DestroyAllClientObjects is what kicks the external client

@miwarnec
Copy link
Collaborator

NC.DestroyAllClientObjects destroys all NC.spawned.
for some reason, the other client's object is in there too:
2022-03-22_02-29-39@2x

so there's a deeper bug here..

@miwarnec miwarnec added bug Something isn't working and removed can't reproduce labels Mar 21, 2022
@miwarnec miwarnec self-assigned this Mar 21, 2022
@miwarnec
Copy link
Collaborator

actually, theo ther client's object is in NC.spawned because it's around the client object.

solution will be for DestroyAllClientObjects to only destroy the client-only ones.

miwarnec added a commit that referenced this issue Mar 22, 2022
miwarnec added a commit that referenced this issue Mar 22, 2022
miwarnec added a commit that referenced this issue Mar 23, 2022
MrGadget1024 added a commit to portals-labs/Mirror that referenced this issue Apr 1, 2022
* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Get; Recycle => Return; (MirrorNetworking#3112)

* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Take; Recycle => Return;

* rename Take() to Get()

* Pool<T> Take() => Get()

* breaking: PooledNetworkReader/Writer renamed to NetworkReader/WriterPooled

* NetworkReaderPooled moved into separate file

* NetworkWriterPooled moved into separate file

* comments

* comments

* perf: NetworkConnection.Send() inlining

* base Transport moved to Runtime folder; Transport folder renamed to Transports

* script icons .meta

* Tests: ShutdownCleanup test cleanup to prepare for Transport events += -= hooking

* feature: allow hooking into Transport events via += -= (prepares for NetworkStatistics) (MirrorNetworking#3116)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics) (MirrorNetworking#3117)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics)

* comments

* feature: NetworkStatistics (MirrorNetworking#3118)

* feature: NetworkStatistics

* better UI

* align NetworkStatistics exactly below NetworkManager HUD

* perf: HandleRemoteCall passes componentIndex as byte to avoid extra < 0 check

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt)

* tests

* perf: CompressVarInt uses WriteByte instead of Write<T> to avoid Action call overhead

* perf: inline GetIndexFromFunctionHash because it's called for every RPC

* perf: NetworkTime.localTime inlined

* perf: NetworkTime.time inlined

* perf: NetworkTime ExponentialMovingAverage .Value & .Var as fields instead of properties to avoid call overhead

* fix: NetworkStatistics Unity 2019 support

* fix: NetworkStatistics Unity 2019 support (part two)

* Tests: runtime clientscene tests simplified and they don't rely on host mode anymore

* hasAuthority comment updated

* Fixed comments

* MultipleMatches example fixed

* fix: MirrorNetworking#3122 DestroyAllClientObjects now also resets after unspawn handler was called (MirrorNetworking#3124)

* fix: MirrorNetworking#2954 calling StopClient in host mode does not reset nextNetId anymore

* fix: MirrorNetworking#2954 calling StopClient in host mode does not destroy other client's objects anymore

* fix: Byte format test uses current culture (MirrorNetworking#3126)

Since some may use , instead of . as their decimal place seperator

Error:
String lengths are both 7. Strings differ at index 1.
  Expected: "1.00 KB"
  But was:  "1,00 KB"

* perf: Build batches directly instead of queuing serializations (MirrorNetworking#3130)

* rename

* so far

* better

* fixx

* old

* error

* typo

* comment

* fix: added Queue.TryDequeue extension for Unity 2019

* fix: Correct version for Queue.TryDequeue
- fixes MirrorNetworking#3131

* fixed comment

Co-authored-by: vis2k <info@noobtuts.com>
Co-authored-by: Robin Rolf <imer@imer.cc>
MrGadget1024 added a commit to portals-labs/Mirror that referenced this issue Apr 11, 2022
* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Get; Recycle => Return; (MirrorNetworking#3112)

* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Take; Recycle => Return;

* rename Take() to Get()

* Pool<T> Take() => Get()

* breaking: PooledNetworkReader/Writer renamed to NetworkReader/WriterPooled

* NetworkReaderPooled moved into separate file

* NetworkWriterPooled moved into separate file

* comments

* comments

* perf: NetworkConnection.Send() inlining

* base Transport moved to Runtime folder; Transport folder renamed to Transports

* script icons .meta

* Tests: ShutdownCleanup test cleanup to prepare for Transport events += -= hooking

* feature: allow hooking into Transport events via += -= (prepares for NetworkStatistics) (MirrorNetworking#3116)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics) (MirrorNetworking#3117)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics)

* comments

* feature: NetworkStatistics (MirrorNetworking#3118)

* feature: NetworkStatistics

* better UI

* align NetworkStatistics exactly below NetworkManager HUD

* perf: HandleRemoteCall passes componentIndex as byte to avoid extra < 0 check

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt)

* tests

* perf: CompressVarInt uses WriteByte instead of Write<T> to avoid Action call overhead

* perf: inline GetIndexFromFunctionHash because it's called for every RPC

* perf: NetworkTime.localTime inlined

* perf: NetworkTime.time inlined

* perf: NetworkTime ExponentialMovingAverage .Value & .Var as fields instead of properties to avoid call overhead

* fix: NetworkStatistics Unity 2019 support

* fix: NetworkStatistics Unity 2019 support (part two)

* Tests: runtime clientscene tests simplified and they don't rely on host mode anymore

* hasAuthority comment updated

* Fixed comments

* MultipleMatches example fixed

* fix: MirrorNetworking#3122 DestroyAllClientObjects now also resets after unspawn handler was called (MirrorNetworking#3124)

* fix: MirrorNetworking#2954 calling StopClient in host mode does not reset nextNetId anymore

* fix: MirrorNetworking#2954 calling StopClient in host mode does not destroy other client's objects anymore

* fix: Byte format test uses current culture (MirrorNetworking#3126)

Since some may use , instead of . as their decimal place seperator

Error:
String lengths are both 7. Strings differ at index 1.
  Expected: "1.00 KB"
  But was:  "1,00 KB"

* perf: Build batches directly instead of queuing serializations (MirrorNetworking#3130)

* rename

* so far

* better

* fixx

* old

* error

* typo

* comment

* fix: added Queue.TryDequeue extension for Unity 2019

* fix: Correct version for Queue.TryDequeue
- fixes MirrorNetworking#3131

* fixed comment

* ReadNetworkIdentity: reuse Utils.GetSpawnedInServerOrClient

* fix: MirrorNetworking#2972 ReadNetworkBehaviour now reads the correct amount of data even if the NetworkIdentity has disappeared on the client.
added test to guarantee it never happens again.

* comment

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects (MirrorNetworking#3132)

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects

* NetworkWriter: WriteGameObject reuses WriteNetworkIdentity

* warning instead of exception

* Tanks Example: reuse DestroySelf()

* Tanks Example: destroy projectile after 2 seconds instead of 5 seconds

* NetworkClient: RegisterPrefabIdentity double registration warning improved with explanation (related to MirrorNetworking#2705)

* fix: MirrorNetworking#2705 NetworkClient.SpawnPrefab looks for spawn handlers before looking for registered prefabs, instead of the other way around

* add comment

Co-authored-by: vis2k <info@noobtuts.com>
Co-authored-by: Robin Rolf <imer@imer.cc>
MrGadget1024 added a commit to portals-labs/Mirror that referenced this issue Apr 16, 2022
* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Get; Recycle => Return; (MirrorNetworking#3112)

* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Take; Recycle => Return;

* rename Take() to Get()

* Pool<T> Take() => Get()

* breaking: PooledNetworkReader/Writer renamed to NetworkReader/WriterPooled

* NetworkReaderPooled moved into separate file

* NetworkWriterPooled moved into separate file

* comments

* comments

* perf: NetworkConnection.Send() inlining

* base Transport moved to Runtime folder; Transport folder renamed to Transports

* script icons .meta

* Tests: ShutdownCleanup test cleanup to prepare for Transport events += -= hooking

* feature: allow hooking into Transport events via += -= (prepares for NetworkStatistics) (MirrorNetworking#3116)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics) (MirrorNetworking#3117)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics)

* comments

* feature: NetworkStatistics (MirrorNetworking#3118)

* feature: NetworkStatistics

* better UI

* align NetworkStatistics exactly below NetworkManager HUD

* perf: HandleRemoteCall passes componentIndex as byte to avoid extra < 0 check

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt)

* tests

* perf: CompressVarInt uses WriteByte instead of Write<T> to avoid Action call overhead

* perf: inline GetIndexFromFunctionHash because it's called for every RPC

* perf: NetworkTime.localTime inlined

* perf: NetworkTime.time inlined

* perf: NetworkTime ExponentialMovingAverage .Value & .Var as fields instead of properties to avoid call overhead

* fix: NetworkStatistics Unity 2019 support

* fix: NetworkStatistics Unity 2019 support (part two)

* Tests: runtime clientscene tests simplified and they don't rely on host mode anymore

* hasAuthority comment updated

* Fixed comments

* MultipleMatches example fixed

* fix: MirrorNetworking#3122 DestroyAllClientObjects now also resets after unspawn handler was called (MirrorNetworking#3124)

* fix: MirrorNetworking#2954 calling StopClient in host mode does not reset nextNetId anymore

* fix: MirrorNetworking#2954 calling StopClient in host mode does not destroy other client's objects anymore

* fix: Byte format test uses current culture (MirrorNetworking#3126)

Since some may use , instead of . as their decimal place seperator

Error:
String lengths are both 7. Strings differ at index 1.
  Expected: "1.00 KB"
  But was:  "1,00 KB"

* perf: Build batches directly instead of queuing serializations (MirrorNetworking#3130)

* rename

* so far

* better

* fixx

* old

* error

* typo

* comment

* fix: added Queue.TryDequeue extension for Unity 2019

* fix: Correct version for Queue.TryDequeue
- fixes MirrorNetworking#3131

* fixed comment

* ReadNetworkIdentity: reuse Utils.GetSpawnedInServerOrClient

* fix: MirrorNetworking#2972 ReadNetworkBehaviour now reads the correct amount of data even if the NetworkIdentity has disappeared on the client.
added test to guarantee it never happens again.

* comment

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects (MirrorNetworking#3132)

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects

* NetworkWriter: WriteGameObject reuses WriteNetworkIdentity

* warning instead of exception

* Tanks Example: reuse DestroySelf()

* Tanks Example: destroy projectile after 2 seconds instead of 5 seconds

* NetworkClient: RegisterPrefabIdentity double registration warning improved with explanation (related to MirrorNetworking#2705)

* fix: MirrorNetworking#2705 NetworkClient.SpawnPrefab looks for spawn handlers before looking for registered prefabs, instead of the other way around

* add comment

* fix: NetworkWriterExtensions:WriteTexture2D call WriteArray instead of Write

* Syntax: same method grouping as NetworkReaderExtenstions

* fix: Weaved static constructors need to always run (MirrorNetworking#3135)

Static constructors are lazily called when the class is first "used"
 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors
 > It is called automatically before the first instance is created or any static members are referenced.
 This means, in particular circumstances, client and server may diverge on which classes they have "loaded"
 and thus the rpc index will be desynced
 One such example would be on-demand-loading of prefabs via custom spawn handlers:
   A game might not want to preload all its monster prefabs since there's quite many of them
   and it is practically impossible to encounter them all (or even a majority of them) in a single play
   session.
   So a custom spawn handler is used to load the monster prefabs on demand.
   All monsters would have the "Monster" NetworkBehaviour class, which would have a few RPCs on it.
   Since the monster prefabs are loaded ONLY when needed via a custom spawn handler and the Monster class
   itself isn't referenced or "loaded" by anything else other than the prefab, the monster classes static
   constructor will not have been called when a client first joins a game, while it may have been called
   on the server/host. This will in turn cause Rpc indexes to not match up between client/server
 By just forcing the static constructors to run via the [RuntimeInitializeOnLoadMethod] attribute
 this is not a problem anymore, since all static constructors are always run and all RPCs will
 always be registered by the time they are used

* Update README.md

* NetworkRoomManager log update

* fix: MirrorNetworking#3138, 3135 revert Cmd/Rpc from 2 byte indices back to 4 byte function hashes for stability (MirrorNetworking#3139)

* Revert "fix: Weaved static constructors need to always run (MirrorNetworking#3135)"

This reverts commit b0624b2.

* Revert "perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)"

This reverts commit a868368.

* comment

Co-authored-by: vis2k <info@noobtuts.com>
Co-authored-by: Robin Rolf <imer@imer.cc>
MrGadget1024 added a commit to portals-labs/Mirror that referenced this issue Apr 16, 2022
* Added Examples & Tests

* Resolve Conflicts

* Mirror 66.0.9 (#13)

* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Get; Recycle => Return; (MirrorNetworking#3112)

* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Take; Recycle => Return;

* rename Take() to Get()

* Pool<T> Take() => Get()

* breaking: PooledNetworkReader/Writer renamed to NetworkReader/WriterPooled

* NetworkReaderPooled moved into separate file

* NetworkWriterPooled moved into separate file

* comments

* comments

* perf: NetworkConnection.Send() inlining

* base Transport moved to Runtime folder; Transport folder renamed to Transports

* script icons .meta

* Tests: ShutdownCleanup test cleanup to prepare for Transport events += -= hooking

* feature: allow hooking into Transport events via += -= (prepares for NetworkStatistics) (MirrorNetworking#3116)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics) (MirrorNetworking#3117)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics)

* comments

* feature: NetworkStatistics (MirrorNetworking#3118)

* feature: NetworkStatistics

* better UI

* align NetworkStatistics exactly below NetworkManager HUD

* perf: HandleRemoteCall passes componentIndex as byte to avoid extra < 0 check

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt)

* tests

* perf: CompressVarInt uses WriteByte instead of Write<T> to avoid Action call overhead

* perf: inline GetIndexFromFunctionHash because it's called for every RPC

* perf: NetworkTime.localTime inlined

* perf: NetworkTime.time inlined

* perf: NetworkTime ExponentialMovingAverage .Value & .Var as fields instead of properties to avoid call overhead

* fix: NetworkStatistics Unity 2019 support

* fix: NetworkStatistics Unity 2019 support (part two)

* Tests: runtime clientscene tests simplified and they don't rely on host mode anymore

* hasAuthority comment updated

* Fixed comments

* MultipleMatches example fixed

* fix: MirrorNetworking#3122 DestroyAllClientObjects now also resets after unspawn handler was called (MirrorNetworking#3124)

* fix: MirrorNetworking#2954 calling StopClient in host mode does not reset nextNetId anymore

* fix: MirrorNetworking#2954 calling StopClient in host mode does not destroy other client's objects anymore

* fix: Byte format test uses current culture (MirrorNetworking#3126)

Since some may use , instead of . as their decimal place seperator

Error:
String lengths are both 7. Strings differ at index 1.
  Expected: "1.00 KB"
  But was:  "1,00 KB"

* perf: Build batches directly instead of queuing serializations (MirrorNetworking#3130)

* rename

* so far

* better

* fixx

* old

* error

* typo

* comment

* fix: added Queue.TryDequeue extension for Unity 2019

* fix: Correct version for Queue.TryDequeue
- fixes MirrorNetworking#3131

* fixed comment

* ReadNetworkIdentity: reuse Utils.GetSpawnedInServerOrClient

* fix: MirrorNetworking#2972 ReadNetworkBehaviour now reads the correct amount of data even if the NetworkIdentity has disappeared on the client.
added test to guarantee it never happens again.

* comment

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects (MirrorNetworking#3132)

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects

* NetworkWriter: WriteGameObject reuses WriteNetworkIdentity

* warning instead of exception

* Tanks Example: reuse DestroySelf()

* Tanks Example: destroy projectile after 2 seconds instead of 5 seconds

* NetworkClient: RegisterPrefabIdentity double registration warning improved with explanation (related to MirrorNetworking#2705)

* fix: MirrorNetworking#2705 NetworkClient.SpawnPrefab looks for spawn handlers before looking for registered prefabs, instead of the other way around

* add comment

* fix: NetworkWriterExtensions:WriteTexture2D call WriteArray instead of Write

* Syntax: same method grouping as NetworkReaderExtenstions

* fix: Weaved static constructors need to always run (MirrorNetworking#3135)

Static constructors are lazily called when the class is first "used"
 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors
 > It is called automatically before the first instance is created or any static members are referenced.
 This means, in particular circumstances, client and server may diverge on which classes they have "loaded"
 and thus the rpc index will be desynced
 One such example would be on-demand-loading of prefabs via custom spawn handlers:
   A game might not want to preload all its monster prefabs since there's quite many of them
   and it is practically impossible to encounter them all (or even a majority of them) in a single play
   session.
   So a custom spawn handler is used to load the monster prefabs on demand.
   All monsters would have the "Monster" NetworkBehaviour class, which would have a few RPCs on it.
   Since the monster prefabs are loaded ONLY when needed via a custom spawn handler and the Monster class
   itself isn't referenced or "loaded" by anything else other than the prefab, the monster classes static
   constructor will not have been called when a client first joins a game, while it may have been called
   on the server/host. This will in turn cause Rpc indexes to not match up between client/server
 By just forcing the static constructors to run via the [RuntimeInitializeOnLoadMethod] attribute
 this is not a problem anymore, since all static constructors are always run and all RPCs will
 always be registered by the time they are used

* Update README.md

* NetworkRoomManager log update

* fix: MirrorNetworking#3138, 3135 revert Cmd/Rpc from 2 byte indices back to 4 byte function hashes for stability (MirrorNetworking#3139)

* Revert "fix: Weaved static constructors need to always run (MirrorNetworking#3135)"

This reverts commit b0624b2.

* Revert "perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)"

This reverts commit a868368.

* comment

Co-authored-by: vis2k <info@noobtuts.com>
Co-authored-by: Robin Rolf <imer@imer.cc>

* version

Co-authored-by: vis2k <info@noobtuts.com>
Co-authored-by: Robin Rolf <imer@imer.cc>
MrGadget1024 added a commit to portals-labs/Mirror that referenced this issue Apr 21, 2022
* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Get; Recycle => Return; (MirrorNetworking#3112)

* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Take; Recycle => Return;

* rename Take() to Get()

* Pool<T> Take() => Get()

* breaking: PooledNetworkReader/Writer renamed to NetworkReader/WriterPooled

* NetworkReaderPooled moved into separate file

* NetworkWriterPooled moved into separate file

* comments

* comments

* perf: NetworkConnection.Send() inlining

* base Transport moved to Runtime folder; Transport folder renamed to Transports

* script icons .meta

* Tests: ShutdownCleanup test cleanup to prepare for Transport events += -= hooking

* feature: allow hooking into Transport events via += -= (prepares for NetworkStatistics) (MirrorNetworking#3116)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics) (MirrorNetworking#3117)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics)

* comments

* feature: NetworkStatistics (MirrorNetworking#3118)

* feature: NetworkStatistics

* better UI

* align NetworkStatistics exactly below NetworkManager HUD

* perf: HandleRemoteCall passes componentIndex as byte to avoid extra < 0 check

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt)

* tests

* perf: CompressVarInt uses WriteByte instead of Write<T> to avoid Action call overhead

* perf: inline GetIndexFromFunctionHash because it's called for every RPC

* perf: NetworkTime.localTime inlined

* perf: NetworkTime.time inlined

* perf: NetworkTime ExponentialMovingAverage .Value & .Var as fields instead of properties to avoid call overhead

* fix: NetworkStatistics Unity 2019 support

* fix: NetworkStatistics Unity 2019 support (part two)

* Tests: runtime clientscene tests simplified and they don't rely on host mode anymore

* hasAuthority comment updated

* Fixed comments

* MultipleMatches example fixed

* fix: MirrorNetworking#3122 DestroyAllClientObjects now also resets after unspawn handler was called (MirrorNetworking#3124)

* fix: MirrorNetworking#2954 calling StopClient in host mode does not reset nextNetId anymore

* fix: MirrorNetworking#2954 calling StopClient in host mode does not destroy other client's objects anymore

* fix: Byte format test uses current culture (MirrorNetworking#3126)

Since some may use , instead of . as their decimal place seperator

Error:
String lengths are both 7. Strings differ at index 1.
  Expected: "1.00 KB"
  But was:  "1,00 KB"

* perf: Build batches directly instead of queuing serializations (MirrorNetworking#3130)

* rename

* so far

* better

* fixx

* old

* error

* typo

* comment

* fix: added Queue.TryDequeue extension for Unity 2019

* fix: Correct version for Queue.TryDequeue
- fixes MirrorNetworking#3131

* fixed comment

* ReadNetworkIdentity: reuse Utils.GetSpawnedInServerOrClient

* fix: MirrorNetworking#2972 ReadNetworkBehaviour now reads the correct amount of data even if the NetworkIdentity has disappeared on the client.
added test to guarantee it never happens again.

* comment

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects (MirrorNetworking#3132)

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects

* NetworkWriter: WriteGameObject reuses WriteNetworkIdentity

* warning instead of exception

* Tanks Example: reuse DestroySelf()

* Tanks Example: destroy projectile after 2 seconds instead of 5 seconds

* NetworkClient: RegisterPrefabIdentity double registration warning improved with explanation (related to MirrorNetworking#2705)

* fix: MirrorNetworking#2705 NetworkClient.SpawnPrefab looks for spawn handlers before looking for registered prefabs, instead of the other way around

* add comment

* fix: NetworkWriterExtensions:WriteTexture2D call WriteArray instead of Write

* Syntax: same method grouping as NetworkReaderExtenstions

* fix: Weaved static constructors need to always run (MirrorNetworking#3135)

Static constructors are lazily called when the class is first "used"
 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors
 > It is called automatically before the first instance is created or any static members are referenced.
 This means, in particular circumstances, client and server may diverge on which classes they have "loaded"
 and thus the rpc index will be desynced
 One such example would be on-demand-loading of prefabs via custom spawn handlers:
   A game might not want to preload all its monster prefabs since there's quite many of them
   and it is practically impossible to encounter them all (or even a majority of them) in a single play
   session.
   So a custom spawn handler is used to load the monster prefabs on demand.
   All monsters would have the "Monster" NetworkBehaviour class, which would have a few RPCs on it.
   Since the monster prefabs are loaded ONLY when needed via a custom spawn handler and the Monster class
   itself isn't referenced or "loaded" by anything else other than the prefab, the monster classes static
   constructor will not have been called when a client first joins a game, while it may have been called
   on the server/host. This will in turn cause Rpc indexes to not match up between client/server
 By just forcing the static constructors to run via the [RuntimeInitializeOnLoadMethod] attribute
 this is not a problem anymore, since all static constructors are always run and all RPCs will
 always be registered by the time they are used

* Update README.md

* NetworkRoomManager log update

* fix: MirrorNetworking#3138, 3135 revert Cmd/Rpc from 2 byte indices back to 4 byte function hashes for stability (MirrorNetworking#3139)

* Revert "fix: Weaved static constructors need to always run (MirrorNetworking#3135)"

This reverts commit b0624b2.

* Revert "perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)"

This reverts commit a868368.

* comment

* Updated NetworkStatistics
- Reorganized to method call order
- Added component attributes
- XML comments for docs

* XML Comments

* MIRROR_66_0_OR_NEWER

* remove unused import

* fixed comment

* fixed XML comment

* breaking: Removed Obsoletes (MirrorNetworking#3142)

* Removed Experimental NetworkTransform

* NetworkRoomManager: Removed Obsoletes

* NetworkTransformBase: Removed Obsoletes

* NetworkBehaviour: Removed Obsoletes

* NetworkManager: Removed Obsoletes

* NetworkServer: Removed Obsoletes

* SyncObject: Removed Obsoletes

* fixed comment

* fixed XML comment

* fix: TeamInterestManagement OnDestroyed logic

* Fixed Authenticator Comments
- Fixes MirrorNetworking#3146

* fix: Benchmark movement destinations set around start, not around position. prevents them from stopping to move because of the wander off protection.

* NetworkWriter/Extensions: inlining WriteBlittable is enough. Don't inline WriteInt etc. too, we don't want WriteBlittable to be copied in place everywhere.

* NetworkReader/Extensions: inlining ReadBlittable is enough. Don't inline ReadInt etc. too, we don't want ReadBlittable to be copied in place everywhere.

* perf: Cmd/Rpc bandwidth hash size reduced from 4 => 2 bytes (MirrorNetworking#3148)

* remove unused import

Co-authored-by: vis2k <info@noobtuts.com>
Co-authored-by: Robin Rolf <imer@imer.cc>
MrGadget1024 added a commit to portals-labs/Mirror that referenced this issue Apr 21, 2022
* Added Examples and Tests

* Updated NetworkStatistics

* Updated Extensions

* Updated NetworkIdentity

* Updated NetworkWriterExtensions

* Updated RemoteCalls

* Updated ProjectSettings

* Mirror 66.0.7 (#16)

* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Get; Recycle => Return; (MirrorNetworking#3112)

* breaking: NetworkReader/WriterPool API simplified: GetReader/Writer => Take; Recycle => Return;

* rename Take() to Get()

* Pool<T> Take() => Get()

* breaking: PooledNetworkReader/Writer renamed to NetworkReader/WriterPooled

* NetworkReaderPooled moved into separate file

* NetworkWriterPooled moved into separate file

* comments

* comments

* perf: NetworkConnection.Send() inlining

* base Transport moved to Runtime folder; Transport folder renamed to Transports

* script icons .meta

* Tests: ShutdownCleanup test cleanup to prepare for Transport events += -= hooking

* feature: allow hooking into Transport events via += -= (prepares for NetworkStatistics) (MirrorNetworking#3116)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics) (MirrorNetworking#3117)

* feature: Transport.OnClient/ServerDataSent events += (prepares for NetworkStatistics)

* comments

* feature: NetworkStatistics (MirrorNetworking#3118)

* feature: NetworkStatistics

* better UI

* align NetworkStatistics exactly below NetworkManager HUD

* perf: HandleRemoteCall passes componentIndex as byte to avoid extra < 0 check

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)

* perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt)

* tests

* perf: CompressVarInt uses WriteByte instead of Write<T> to avoid Action call overhead

* perf: inline GetIndexFromFunctionHash because it's called for every RPC

* perf: NetworkTime.localTime inlined

* perf: NetworkTime.time inlined

* perf: NetworkTime ExponentialMovingAverage .Value & .Var as fields instead of properties to avoid call overhead

* fix: NetworkStatistics Unity 2019 support

* fix: NetworkStatistics Unity 2019 support (part two)

* Tests: runtime clientscene tests simplified and they don't rely on host mode anymore

* hasAuthority comment updated

* Fixed comments

* MultipleMatches example fixed

* fix: MirrorNetworking#3122 DestroyAllClientObjects now also resets after unspawn handler was called (MirrorNetworking#3124)

* fix: MirrorNetworking#2954 calling StopClient in host mode does not reset nextNetId anymore

* fix: MirrorNetworking#2954 calling StopClient in host mode does not destroy other client's objects anymore

* fix: Byte format test uses current culture (MirrorNetworking#3126)

Since some may use , instead of . as their decimal place seperator

Error:
String lengths are both 7. Strings differ at index 1.
  Expected: "1.00 KB"
  But was:  "1,00 KB"

* perf: Build batches directly instead of queuing serializations (MirrorNetworking#3130)

* rename

* so far

* better

* fixx

* old

* error

* typo

* comment

* fix: added Queue.TryDequeue extension for Unity 2019

* fix: Correct version for Queue.TryDequeue
- fixes MirrorNetworking#3131

* fixed comment

* ReadNetworkIdentity: reuse Utils.GetSpawnedInServerOrClient

* fix: MirrorNetworking#2972 ReadNetworkBehaviour now reads the correct amount of data even if the NetworkIdentity has disappeared on the client.
added test to guarantee it never happens again.

* comment

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects (MirrorNetworking#3132)

* fix: MirrorNetworking#2060 serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects

* NetworkWriter: WriteGameObject reuses WriteNetworkIdentity

* warning instead of exception

* Tanks Example: reuse DestroySelf()

* Tanks Example: destroy projectile after 2 seconds instead of 5 seconds

* NetworkClient: RegisterPrefabIdentity double registration warning improved with explanation (related to MirrorNetworking#2705)

* fix: MirrorNetworking#2705 NetworkClient.SpawnPrefab looks for spawn handlers before looking for registered prefabs, instead of the other way around

* add comment

* fix: NetworkWriterExtensions:WriteTexture2D call WriteArray instead of Write

* Syntax: same method grouping as NetworkReaderExtenstions

* fix: Weaved static constructors need to always run (MirrorNetworking#3135)

Static constructors are lazily called when the class is first "used"
 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors
 > It is called automatically before the first instance is created or any static members are referenced.
 This means, in particular circumstances, client and server may diverge on which classes they have "loaded"
 and thus the rpc index will be desynced
 One such example would be on-demand-loading of prefabs via custom spawn handlers:
   A game might not want to preload all its monster prefabs since there's quite many of them
   and it is practically impossible to encounter them all (or even a majority of them) in a single play
   session.
   So a custom spawn handler is used to load the monster prefabs on demand.
   All monsters would have the "Monster" NetworkBehaviour class, which would have a few RPCs on it.
   Since the monster prefabs are loaded ONLY when needed via a custom spawn handler and the Monster class
   itself isn't referenced or "loaded" by anything else other than the prefab, the monster classes static
   constructor will not have been called when a client first joins a game, while it may have been called
   on the server/host. This will in turn cause Rpc indexes to not match up between client/server
 By just forcing the static constructors to run via the [RuntimeInitializeOnLoadMethod] attribute
 this is not a problem anymore, since all static constructors are always run and all RPCs will
 always be registered by the time they are used

* Update README.md

* NetworkRoomManager log update

* fix: MirrorNetworking#3138, 3135 revert Cmd/Rpc from 2 byte indices back to 4 byte function hashes for stability (MirrorNetworking#3139)

* Revert "fix: Weaved static constructors need to always run (MirrorNetworking#3135)"

This reverts commit b0624b2.

* Revert "perf: Rpcs/Cmds functionHash bandwidth reduced from 4 => 2 bytes (with the potential for 1 byte VarInt) (MirrorNetworking#3119)"

This reverts commit a868368.

* comment

* Updated NetworkStatistics
- Reorganized to method call order
- Added component attributes
- XML comments for docs

* XML Comments

* MIRROR_66_0_OR_NEWER

* remove unused import

* fixed comment

* fixed XML comment

* breaking: Removed Obsoletes (MirrorNetworking#3142)

* Removed Experimental NetworkTransform

* NetworkRoomManager: Removed Obsoletes

* NetworkTransformBase: Removed Obsoletes

* NetworkBehaviour: Removed Obsoletes

* NetworkManager: Removed Obsoletes

* NetworkServer: Removed Obsoletes

* SyncObject: Removed Obsoletes

* fixed comment

* fixed XML comment

* fix: TeamInterestManagement OnDestroyed logic

* Fixed Authenticator Comments
- Fixes MirrorNetworking#3146

* fix: Benchmark movement destinations set around start, not around position. prevents them from stopping to move because of the wander off protection.

* NetworkWriter/Extensions: inlining WriteBlittable is enough. Don't inline WriteInt etc. too, we don't want WriteBlittable to be copied in place everywhere.

* NetworkReader/Extensions: inlining ReadBlittable is enough. Don't inline ReadInt etc. too, we don't want ReadBlittable to be copied in place everywhere.

* perf: Cmd/Rpc bandwidth hash size reduced from 4 => 2 bytes (MirrorNetworking#3148)

* remove unused import

Co-authored-by: vis2k <info@noobtuts.com>
Co-authored-by: Robin Rolf <imer@imer.cc>

* Removed Examples & Tests

* updated version

Co-authored-by: vis2k <info@noobtuts.com>
Co-authored-by: Robin Rolf <imer@imer.cc>
github-actions bot pushed a commit to James-Frowen/Mirror that referenced this issue Jul 25, 2023
# [39.0.0](https://github.com/James-Frowen/Mirror/compare/v38.0.1...v39.0.0) (2023-07-25)

### breaking

* **NetworkManager:** Removed obsolete OnServerError / OnClientError ([4b34dc2](https://github.com/James-Frowen/Mirror/commit/4b34dc2fe8771f0b1c05fead47ab46c3e66cc43e))

### Bug Fixes

* "Spawned object not found when handling Command message" for unreliable commands which may have arrived before spawning, e.g. for NetworkTransform ([#3007](https://github.com/James-Frowen/Mirror/issues/3007)) ([975828f](https://github.com/James-Frowen/Mirror/commit/975828f3dcda60dd4ff1d70ec8d1de6a2ffee790))
* [#2060](https://github.com/James-Frowen/Mirror/issues/2060) serializing GameObjects / NetworkIdentities now throws an obvious exception for prefabs / unspawned objects ([#3132](https://github.com/James-Frowen/Mirror/issues/3132)) ([1a6c5de](https://github.com/James-Frowen/Mirror/commit/1a6c5de8acde863805fe27dbbf22a99c60bda6a4))
* [#2119](https://github.com/James-Frowen/Mirror/issues/2119) - DestroyObject is now called when cleaning up scene identities too. Sends unspawn messages and calls OnStopClient/Server properly. ([d466d73](https://github.com/James-Frowen/Mirror/commit/d466d73f853c9fae9da894dd487296509e34e4ef))
* [#2240](https://github.com/James-Frowen/Mirror/issues/2240) [#3324](https://github.com/James-Frowen/Mirror/issues/3324) NetworkIdentity.OnDestroy removes from spawned if not removed yet. prevents null entries in .spawned. ([#3327](https://github.com/James-Frowen/Mirror/issues/3327)) ([739ef7c](https://github.com/James-Frowen/Mirror/commit/739ef7ccc0c4119c9c8ec5879a7a96e79f34d396))
* [#2536](https://github.com/James-Frowen/Mirror/issues/2536), [#2834](https://github.com/James-Frowen/Mirror/issues/2834) - stop transport server even if dontListen in case it was enabled at runtime ([08c74de](https://github.com/James-Frowen/Mirror/commit/08c74deca0eae53097bf86a68b9083135940c253))
* [#2651](https://github.com/James-Frowen/Mirror/issues/2651) scene changing with batching would cause errors because we wouldn't stop the batch processing after a scene message ([#2774](https://github.com/James-Frowen/Mirror/issues/2774)) ([c5e8614](https://github.com/James-Frowen/Mirror/commit/c5e861410157cea1731450675138d40d1e6aba9a))
* [#2674](https://github.com/James-Frowen/Mirror/issues/2674) - Quaternion Compression LargestAbsoluteComponentIndex largest absolute was accidentally initialized with largest, instead of largest absolute ([2aa791a](https://github.com/James-Frowen/Mirror/commit/2aa791a72618c7fd7fd00dc5abd3aa49fca2f81d))
* [#2705](https://github.com/James-Frowen/Mirror/issues/2705) NetworkClient.SpawnPrefab looks for spawn handlers before looking for registered prefabs, instead of the other way around ([eded0a2](https://github.com/James-Frowen/Mirror/commit/eded0a2b15fd873e42217aee75abe101557fcbb0))
* [#2739](https://github.com/James-Frowen/Mirror/issues/2739): NetworkServer.Update now operates on a copy of connections so transports can call OnTransportDisconnected from within send. avoids 'collection can't be modified while iterating' exception ([c815629](https://github.com/James-Frowen/Mirror/commit/c8156292a576b29993ae60957b1a44199e4a5f3a))
* [#2744](https://github.com/James-Frowen/Mirror/issues/2744) KcpTransport statistics changed to long to avoid int overflows ([6eea1e7](https://github.com/James-Frowen/Mirror/commit/6eea1e77f57af0659be265477650c6ef2fb02b45))
* [#2778](https://github.com/James-Frowen/Mirror/issues/2778) SpawnObjects SetActive(true) would not initialize NetworkIdentity if the parent is inactive because Unity would not call Awake() ([2c2581f](https://github.com/James-Frowen/Mirror/commit/2c2581fa08cc9f9611ac3ab8fbca73b3275e9e33))
* [#2793](https://github.com/James-Frowen/Mirror/issues/2793) - Interest Management V2 now offers SetHostVisibility overwriting ([#2813](https://github.com/James-Frowen/Mirror/issues/2813)) ([fb052a3](https://github.com/James-Frowen/Mirror/commit/fb052a30b5f2e3d4f58378d4d4309829e8b35f5d))
* [#2797](https://github.com/James-Frowen/Mirror/issues/2797) Clear hasAuthority when Destroying and call OnStopAuthority ([0d2733c](https://github.com/James-Frowen/Mirror/commit/0d2733c56450c6138802f1bdcc6eedbb91315fe8))
* [#2818](https://github.com/James-Frowen/Mirror/issues/2818) NetworkClient Disconnecting state added. Disconnect now sets state to Disconnecting. OnTransportDisconnected doesn't early return anymore because state was == Disconnected already before. fixes OnClientDisconnect not being called for remote connections. ([#2821](https://github.com/James-Frowen/Mirror/issues/2821)) ([1c23b70](https://github.com/James-Frowen/Mirror/commit/1c23b70ca89994accbb3aa3758d938d9d955f457))
* [#2822](https://github.com/James-Frowen/Mirror/issues/2822) - OnClientDisconnect wasn't called for host disconnect because LocalConnectionToServer wouldn't call OnTransportDisconnected ([#2823](https://github.com/James-Frowen/Mirror/issues/2823)) ([b305741](https://github.com/James-Frowen/Mirror/commit/b305741b4bd040049d4189894b53a60744177a36))
* [#2842](https://github.com/James-Frowen/Mirror/issues/2842) Revert "fix: Prevent recursion overflow when stopping ([#2833](https://github.com/James-Frowen/Mirror/issues/2833))" ([24033c1](https://github.com/James-Frowen/Mirror/commit/24033c101b328bb46b4bada5a7105f81d304fce1))
* [#2882](https://github.com/James-Frowen/Mirror/issues/2882) UnpackAndInvoke now errors and disconnects in case of missing handler. This is necessary because messages in a batch are not length prefixed. we always need to read to the end, otherwise it overlaps into the next one, causing undefined behaviour. ([86eeecc](https://github.com/James-Frowen/Mirror/commit/86eeecc9cf11d710be5d92de2f7553a5a895eb19))
* [#2907](https://github.com/James-Frowen/Mirror/issues/2907) LatencySimulation now uses Time.unscaledTime ([e7a2a14](https://github.com/James-Frowen/Mirror/commit/e7a2a1467f7d6c2372e8064e2defffb55c874dd1))
* [#2912](https://github.com/James-Frowen/Mirror/issues/2912) ILPostProcessor isn't used before 2020.3 because Unity bugs ([8b5534f](https://github.com/James-Frowen/Mirror/commit/8b5534f51fd998c6544ef7b5e81864bbd952ba9d))
* [#2928](https://github.com/James-Frowen/Mirror/issues/2928) - Weaver now recommends 'readonly' keywords for SyncObjects ([#2941](https://github.com/James-Frowen/Mirror/issues/2941)) ([7e546cf](https://github.com/James-Frowen/Mirror/commit/7e546cf799867d4f970b3ebd7d4bd111c6d52a53))
* [#2954](https://github.com/James-Frowen/Mirror/issues/2954) calling StopClient in host mode does not destroy other client's objects anymore ([d8774ec](https://github.com/James-Frowen/Mirror/commit/d8774ecd478b51c6404816c0d8a681ad6d8916fd))
* [#2954](https://github.com/James-Frowen/Mirror/issues/2954) calling StopClient in host mode does not reset nextNetId anymore ([6f98122](https://github.com/James-Frowen/Mirror/commit/6f981224a93e1d16387af454d5da6d4f85806510))
* [#2972](https://github.com/James-Frowen/Mirror/issues/2972) ReadNetworkBehaviour now reads the correct amount of data even if the NetworkIdentity has disappeared on the client. ([243821f](https://github.com/James-Frowen/Mirror/commit/243821f5b1e40de8c8e95f5a77703646358ec529))
* [#3022](https://github.com/James-Frowen/Mirror/issues/3022) kcp2k V1.15 - MaxRetransmit aka dead_link is now configurable. fixes issues where dead_link may have been too low causing premature disconnects. Default is now '40' instead of Kcp.DEAD_LINK '20'. ([b0b0193](https://github.com/James-Frowen/Mirror/commit/b0b01938e69bcc37675a6cccf2ebd3098b859ac3))
* [#3024](https://github.com/James-Frowen/Mirror/issues/3024) Revert NT Bandwidth savings for now ([c08ceb6](https://github.com/James-Frowen/Mirror/commit/c08ceb6a82d0f23874b1cb7765e5de842c5fbcaf))
* [#3044](https://github.com/James-Frowen/Mirror/issues/3044) Revert "perf: NetworkWriter/Reader Write/ReadBlittable<T> for 4-6x performance improvement! (based on [#2441](https://github.com/James-Frowen/Mirror/issues/2441)) ([#3036](https://github.com/James-Frowen/Mirror/issues/3036))" ([c030574](https://github.com/James-Frowen/Mirror/commit/c030574345b7ac7cdeb059860c60997121a64cac))
* [#3044](https://github.com/James-Frowen/Mirror/issues/3044) Revert "perf: NetworkWriter/Reader Write/ReadBlittable<T> for 4-6x performance improvement! (based on [#2441](https://github.com/James-Frowen/Mirror/issues/2441)) ([#3036](https://github.com/James-Frowen/Mirror/issues/3036))" ([2b441d1](https://github.com/James-Frowen/Mirror/commit/2b441d181eb661f256f82e7a5b95b7ab3c782fab))
* [#3106](https://github.com/James-Frowen/Mirror/issues/3106) NetworkClient.ChangeOwner now uses .isLocalPlayer flag to check if OnStopLocalPlayer should be called. ([f6df4ed](https://github.com/James-Frowen/Mirror/commit/f6df4edaae9bb77990cd17e50e0ff2ba1acf2cdd))
* [#3122](https://github.com/James-Frowen/Mirror/issues/3122) DestroyAllClientObjects now also resets after unspawn handler was called ([#3124](https://github.com/James-Frowen/Mirror/issues/3124)) ([3d6c41a](https://github.com/James-Frowen/Mirror/commit/3d6c41a595d4e0863910aafd3c8b11a233864260))
* [#3138](https://github.com/James-Frowen/Mirror/issues/3138), 3135 revert Cmd/Rpc from 2 byte indices back to 4 byte function hashes for stability ([#3139](https://github.com/James-Frowen/Mirror/issues/3139)) ([4d0cd10](https://github.com/James-Frowen/Mirror/commit/4d0cd1054a9011ee4492f91ed4bd16c671fea470)), closes [#3135](https://github.com/James-Frowen/Mirror/issues/3135) [#3119](https://github.com/James-Frowen/Mirror/issues/3119)
* [#3144](https://github.com/James-Frowen/Mirror/issues/3144) Reader/Writer Sprite null support & test to guarantee it never happens again ([2984350](https://github.com/James-Frowen/Mirror/commit/298435001afe407c8ec76bc4268f0cb1caff4f96))
* [#3144](https://github.com/James-Frowen/Mirror/issues/3144) Reader/Writer Texture2D null support & test to guarantee it never happens again ([ae1c7c5](https://github.com/James-Frowen/Mirror/commit/ae1c7c5fe4459ce9bacc59ec3229c4191be7c98e))
* [#3152](https://github.com/James-Frowen/Mirror/issues/3152) [#3213](https://github.com/James-Frowen/Mirror/issues/3213) NetworkClient.AddTransportHandlers ensures they are only added once, never twice even if a community Transport forgets to call OnDisconnected ([3a7a5be](https://github.com/James-Frowen/Mirror/commit/3a7a5be152266661b152b8b3a9c1903a176562fd))
* [#3234](https://github.com/James-Frowen/Mirror/issues/3234) assetId setter now allows overwriting an old assetId after duplicating a prefab. ([270be5f](https://github.com/James-Frowen/Mirror/commit/270be5f45287a05c232115c3876893a2062df23c))
* [#3258](https://github.com/James-Frowen/Mirror/issues/3258) NetworkWriter.WriteString now ensures capacity before manually writing into the buffer ([d79de6b](https://github.com/James-Frowen/Mirror/commit/d79de6bf0ca1dc547f4a7d6fddd96aa931322eda))
* [#3259](https://github.com/James-Frowen/Mirror/issues/3259) NetworkClient.ApplySpawnPayload now initializes NetworkIdentity flags before DeserializeClient invokes SyncVar hooks ([3815fe9](https://github.com/James-Frowen/Mirror/commit/3815fe94a80ef9727c7db9c2418f4d51e5fdc205))
* [#3280](https://github.com/James-Frowen/Mirror/issues/3280) [#3083](https://github.com/James-Frowen/Mirror/issues/3083) [#3217](https://github.com/James-Frowen/Mirror/issues/3217) MultiplexTransport connectionId multiplexing out of int.max range ([#3291](https://github.com/James-Frowen/Mirror/issues/3291)) ([6d60471](https://github.com/James-Frowen/Mirror/commit/6d60471868a83591ae8634898d40b17be832e525))
* [#3287](https://github.com/James-Frowen/Mirror/issues/3287) Telepathy NullReferenceException on client after Server was forcefully closed ([ce9d52e](https://github.com/James-Frowen/Mirror/commit/ce9d52e8fdd4812f18c2495feef128962b49e9a6))
* [#3290](https://github.com/James-Frowen/Mirror/issues/3290): Weaver HasNetworkConnectionParameter now supports inheritance ([#3293](https://github.com/James-Frowen/Mirror/issues/3293)) ([4ae4834](https://github.com/James-Frowen/Mirror/commit/4ae4834f7a9b89a8c81c3587cc1f538a417c9488))
* [#3302](https://github.com/James-Frowen/Mirror/issues/3302) StartHost: user callbacks OnStartServer/OnStartHost aren't invoked until everything was set up in FinishStartHost. ([#3304](https://github.com/James-Frowen/Mirror/issues/3304)) ([42a0c8e](https://github.com/James-Frowen/Mirror/commit/42a0c8ef671fbcb5803fee43f8484f610d55f2a9))
* [#3307](https://github.com/James-Frowen/Mirror/issues/3307) kcp2k V1.24 ([3e3a1cb](https://github.com/James-Frowen/Mirror/commit/3e3a1cbb4474a1f4777f2e761ce8e00adc031343))
* [#3308](https://github.com/James-Frowen/Mirror/issues/3308) scene change NetworkClient.owned null entry. NetworkIdentity.OnDestroy now removes from owned. ([#3325](https://github.com/James-Frowen/Mirror/issues/3325)) ([100847c](https://github.com/James-Frowen/Mirror/commit/100847cc3158c1b8d3fcd01cc0ba47be66860755))
* [#3315](https://github.com/James-Frowen/Mirror/issues/3315) ClientToServer SyncList support ([#3320](https://github.com/James-Frowen/Mirror/issues/3320)) ([6cf03d6](https://github.com/James-Frowen/Mirror/commit/6cf03d60a39f4c655c4bc4e15f0fe014b6100d1e))
* [#3318](https://github.com/James-Frowen/Mirror/issues/3318) NetworkServer.SpawnObjects only spawns objects which haven't been spawned yet. ([#3328](https://github.com/James-Frowen/Mirror/issues/3328)) ([e95c9ae](https://github.com/James-Frowen/Mirror/commit/e95c9ae9a7edd2ff07810cf98facd326c8557278))
* [#3326](https://github.com/James-Frowen/Mirror/issues/3326) NetworkIdentity doesn't reset SyncObjects anymore ([#3339](https://github.com/James-Frowen/Mirror/issues/3339)) ([273f910](https://github.com/James-Frowen/Mirror/commit/273f91088fa537a1e8a97147613df5da5ead8108))
* [#3329](https://github.com/James-Frowen/Mirror/issues/3329) NetworkTransform UpdateServer checks if .connectionToClient is null to support room demo / scene changes ([ca9f07d](https://github.com/James-Frowen/Mirror/commit/ca9f07d8120c9affaddb008b7dcc40e121e4a5be))
* [#3330](https://github.com/James-Frowen/Mirror/issues/3330) [#2422](https://github.com/James-Frowen/Mirror/issues/2422) SpawnObjects now activates, but does not spawn scene objects with inactive parents ([#3347](https://github.com/James-Frowen/Mirror/issues/3347)) ([3c85efa](https://github.com/James-Frowen/Mirror/commit/3c85efa2d91d5f1feb6972086739bec1bf5aa0f5))
* [#3334](https://github.com/James-Frowen/Mirror/issues/3334) NetworkClient DestroyAllClientObjects Before ClearSpawners ([#3336](https://github.com/James-Frowen/Mirror/issues/3336)) ([c364d19](https://github.com/James-Frowen/Mirror/commit/c364d194fe892118e45be7b5995d1bf7fb849d7b))
* [#3340](https://github.com/James-Frowen/Mirror/issues/3340) SyncList callbacks are only called once ([c5aa474](https://github.com/James-Frowen/Mirror/commit/c5aa4746e1fb6f3b3d081b8e37d9f0d5c4de35d3))
* [#3340](https://github.com/James-Frowen/Mirror/issues/3340) SyncSet/Dictionary callbacks are only called once ([7b7ad85](https://github.com/James-Frowen/Mirror/commit/7b7ad852043fcb9792926adb9aa46de339e02998))
* [#3341](https://github.com/James-Frowen/Mirror/issues/3341) SyncLists can now be modified before spawning again ([8570afa](https://github.com/James-Frowen/Mirror/commit/8570afab94d49d0d91142e1f089f683b64de3256))
* [#3342](https://github.com/James-Frowen/Mirror/issues/3342) InitSyncObject IsWritable/IsRecording permissions fixed for host mode and other player's objects on client ([02218bd](https://github.com/James-Frowen/Mirror/commit/02218bda13d19efd436ebfc343dd13a6bd06cc2d))
* [#3343](https://github.com/James-Frowen/Mirror/issues/3343) allow modifying client synclists for unspawned objects like character previews ([0d53f7c](https://github.com/James-Frowen/Mirror/commit/0d53f7c3a03ceca31207d0389c57c9c16275a722))
* [#3344](https://github.com/James-Frowen/Mirror/issues/3344) NetworkServer.Shutdown sets active=false after destroying spawned objects. ([027458d](https://github.com/James-Frowen/Mirror/commit/027458db967f2e9533411f44558c81633061f743))
* [#3351](https://github.com/James-Frowen/Mirror/issues/3351) - Reset Statics in NS, NC, and NC_TimeInterpolation ([#3353](https://github.com/James-Frowen/Mirror/issues/3353)) ([875b345](https://github.com/James-Frowen/Mirror/commit/875b34540ac6862dd65b71dd613feae19ea5a36e))
* [#3354](https://github.com/James-Frowen/Mirror/issues/3354) SyncList callback for OP_SET index parameter fixed ([e16e556](https://github.com/James-Frowen/Mirror/commit/e16e55616b0b5027350a494d49d4f48b9500586b))
* [#3362](https://github.com/James-Frowen/Mirror/issues/3362) BootstrapIdentity now initializes isClient/isLocalPlayer flags before calling OnStartAuthority ([0312bf7](https://github.com/James-Frowen/Mirror/commit/0312bf710324fbde0553a0091151aa703d0d1d66))
* [#3365](https://github.com/James-Frowen/Mirror/issues/3365) NetworkClient.OnTransportDisconnected now always invokes OnDisconnected, even during connecting phase ([7d2d21a](https://github.com/James-Frowen/Mirror/commit/7d2d21ac2cf0c064a42cdb2fd9417e02c0563df6))
* [#3367](https://github.com/James-Frowen/Mirror/issues/3367) NetworkTransformReliable now checks for changes at the end of UpdateServer, not at the beginning [imer] ([deddbe6](https://github.com/James-Frowen/Mirror/commit/deddbe6ee94f9c841625970845be49f5a5d29d35))
* [#3392](https://github.com/James-Frowen/Mirror/issues/3392) NetworkLoop now checks if the function was already added before. fixes functions being added twice with Domain Reload disabled. ([8f66bd6](https://github.com/James-Frowen/Mirror/commit/8f66bd68ca6e6e298b560b2e9c8234f40bf1a06f))
* [#3409](https://github.com/James-Frowen/Mirror/issues/3409) - NetworkTime now always uses unscaled time as double. Forgot to push the commit for the previous commit's PR ([4193b54](https://github.com/James-Frowen/Mirror/commit/4193b5401e29703c110f35ed623471a362ee56f8))
* [#3409](https://github.com/James-Frowen/Mirror/issues/3409) NetworkTime now always uses ([#3475](https://github.com/James-Frowen/Mirror/issues/3475)) ([754a98f](https://github.com/James-Frowen/Mirror/commit/754a98fd71650b7f6d0fbe9ef97fcc6fd603aa8f))
* [#3427](https://github.com/James-Frowen/Mirror/issues/3427) NetworKTransformReliable now has a timelineOffset to account for decoupled arrival of NetworkTime and NetworkTransform snapshots ([#3428](https://github.com/James-Frowen/Mirror/issues/3428)) ([30d7b5b](https://github.com/James-Frowen/Mirror/commit/30d7b5b3a89a51c7ed4507b53a2b9975d376b767))
* [#3447](https://github.com/James-Frowen/Mirror/issues/3447) make cached SyncVar fallback to original field value when there is no network context ([#3449](https://github.com/James-Frowen/Mirror/issues/3449)) ([88170ed](https://github.com/James-Frowen/Mirror/commit/88170ed1415721362c89e986b5b03b43867167d0))
* [#3455](https://github.com/James-Frowen/Mirror/issues/3455) TargetRpc(NetworkConnectionToClient) weaver generated InvokeTargetRpc now passes 'null' as connection parameter on clients. ([#3465](https://github.com/James-Frowen/Mirror/issues/3465)) ([4eeb703](https://github.com/James-Frowen/Mirror/commit/4eeb7034881d74bb21b230aadb5b2fe049aab92c))
* [#3457](https://github.com/James-Frowen/Mirror/issues/3457) Make NumSyncVars take parent class syncvars into account ([#3458](https://github.com/James-Frowen/Mirror/issues/3458)) ([3420c88](https://github.com/James-Frowen/Mirror/commit/3420c88692cf1495f4e77515f0a45852684c1b68))
* [#3482](https://github.com/James-Frowen/Mirror/issues/3482) Weaver Generic 'out' parameter IL2CPP build failures [credit: JamesDev] ([bf5cd97](https://github.com/James-Frowen/Mirror/commit/bf5cd97e6920e280b506359b68cc897e5d060674))
* [#3485](https://github.com/James-Frowen/Mirror/issues/3485) Weaver now skips protected fields (Credit: James) ([#3493](https://github.com/James-Frowen/Mirror/issues/3493)) ([d74e612](https://github.com/James-Frowen/Mirror/commit/d74e61298efbf7410c64f9e6af5969f2355d76cf))
* [#3525](https://github.com/James-Frowen/Mirror/issues/3525) by explaining the solution in the Error message. ([acf67dd](https://github.com/James-Frowen/Mirror/commit/acf67dddb03b06100b92c1c4b3ed44f84d4cf85e))
* [#3538](https://github.com/James-Frowen/Mirror/issues/3538) calling unspawn on scene objects in DestroyOwnedObjects ([#3542](https://github.com/James-Frowen/Mirror/issues/3542)) ([08fa026](https://github.com/James-Frowen/Mirror/commit/08fa0269de12a70a38d2355cf9142ed28120b8f2))
* 2019 support ([5509bb7](https://github.com/James-Frowen/Mirror/commit/5509bb73bb4bf54d674f18c269ee08686bb19450))
* 2019 tests work again ([#3547](https://github.com/James-Frowen/Mirror/issues/3547)) ([39211f9](https://github.com/James-Frowen/Mirror/commit/39211f90023060001794f8da882051c422576282))
* AddComponentMenu hide example / obsolete components ([274721b](https://github.com/James-Frowen/Mirror/commit/274721b2976e895da892cbd781d07c3152826c96))
* added / updated AddComponent attributes ([#3062](https://github.com/James-Frowen/Mirror/issues/3062)) ([238c80d](https://github.com/James-Frowen/Mirror/commit/238c80dc33b09d09e2ededf75aa1331045ca030a))
* Added clientStarted check to OnStopClient ([461ce27](https://github.com/James-Frowen/Mirror/commit/461ce2790885cd9668672078cc63f30cfd674f8f)), closes [#3245](https://github.com/James-Frowen/Mirror/issues/3245)
* Added empty version file ([35e4122](https://github.com/James-Frowen/Mirror/commit/35e41227d017436f6baeb5b7d76bc6d9fb06cf2e))
* Added HashSet for disconnecting connections ([#2981](https://github.com/James-Frowen/Mirror/issues/2981)) ([803e804](https://github.com/James-Frowen/Mirror/commit/803e804d87db98ca8542f17a6260349d0c4a8978))
* Added missing [Command] attribute to NetworkAnimator.CmdSetAnimatorSpeed ([015c4d3](https://github.com/James-Frowen/Mirror/commit/015c4d3f3575a6e35cbf716f0a939b4b1e609b8b))
* Added missing EventSystem to example scenes ([63235f2](https://github.com/James-Frowen/Mirror/commit/63235f2f736982c99816d5af4f208f914a9c84c5))
* Added null check and error logging to OnDeserializeAllSafely ([b86c861](https://github.com/James-Frowen/Mirror/commit/b86c8615f45dbb7ed05831d4a381846fc347ad19))
* added Queue.TryDequeue extension for Unity 2019 ([3d471db](https://github.com/James-Frowen/Mirror/commit/3d471db938f11dc4e1d4607adac1fb9a148b2350))
* Added SimpleWebTransport to Mirror.Transports AsmDef ([79718d0](https://github.com/James-Frowen/Mirror/commit/79718d0638b926dd6a1b3959984e2ab7e788de7a))
* **Additive Levels:** Improve FadeInOut timing ([6e2227d](https://github.com/James-Frowen/Mirror/commit/6e2227dcbf96dd49de95c3bfb4e1a480c9d4ebbe))
* **AdditiveLevels:** FadeInOut more user friendly ([1aedd8d](https://github.com/James-Frowen/Mirror/commit/1aedd8d7c052e8cc7c5ce228bf367a0d2f98905d))
* **AdditiveLevels:** Improved FadeInOut Timing ([7333f88](https://github.com/James-Frowen/Mirror/commit/7333f88e1ff09970b0171016b6a2ba3ab4ab8cd7))
* Android multicast Discovery. Fixes [#2878](https://github.com/James-Frowen/Mirror/issues/2878) ([#2887](https://github.com/James-Frowen/Mirror/issues/2887)) ([7670271](https://github.com/James-Frowen/Mirror/commit/7670271bf1f70840b73562c5933e9dec35484a01))
* Avoid NRE in UnpackAndInvoke ([#2800](https://github.com/James-Frowen/Mirror/issues/2800)) ([57d1892](https://github.com/James-Frowen/Mirror/commit/57d1892433ba3ebef9b382eea48b370087321762))
* **BasicExample:** Revert unintended changes ([35ec40e](https://github.com/James-Frowen/Mirror/commit/35ec40ea60a7ab3a6155a595ab573b4e6b2d09fd))
* Batcher 'MaxBatchSize' changed to 'Threshold' to support larger messages too. They simply become large batches, while smaller ones are still fitted into 'Threshold'. fixes data race where larger messages would be sent immediately, while smaller ones would be sent at the end of the frame. prepares for timestamp batching which assumes a timestamp prefix for ALL batches (including larger ones, which previously would be treated as not a batch) ([#2787](https://github.com/James-Frowen/Mirror/issues/2787)) ([2a563b9](https://github.com/James-Frowen/Mirror/commit/2a563b96df4e71d7b5f58962b43d6bace0ea00d2))
* Batching VarInt size header added to fix custom serializated NetworkMessages with size mismatch corrupting the next message in a batch ([#3516](https://github.com/James-Frowen/Mirror/issues/3516)) ([13fd721](https://github.com/James-Frowen/Mirror/commit/13fd7211e0b57e0751c10dfdf59c16778bf22476))
* Benchmark demo Spatial Hashing radius reduced from 200 to 30 so the monsters actually despawn when walking out of range in the demo ([4127345](https://github.com/James-Frowen/Mirror/commit/4127345f8a2b9e058cc9217470713eab571eb558))
* Benchmark movement destinations set around start, not around position. prevents them from stopping to move because of the wander off protection. ([cebfab0](https://github.com/James-Frowen/Mirror/commit/cebfab010f227a457ba4caad9edff6cee06dc39e))
* breaking: Spatial hashing interest management resolution formula fixed. this is why spatial hashing visibility range always seemed a bit lower than with distance interest management. ([5f4a031](https://github.com/James-Frowen/Mirror/commit/5f4a03109dbe664309080e9365d34ebafd269a2b))
* Byte format test uses current culture ([#3126](https://github.com/James-Frowen/Mirror/issues/3126)) ([1631402](https://github.com/James-Frowen/Mirror/commit/1631402bd7cad3f349f12a4e0d4eb82821c382a9))
* Call OnStopLocalPlayer from ChangeOwner ([27e71ac](https://github.com/James-Frowen/Mirror/commit/27e71acef620de7fe28813e7c2095b4628268eb5))
* Call StopDiscovery when stopping Host/Server/Client in DiscoveryHUD ([0b4fd22](https://github.com/James-Frowen/Mirror/commit/0b4fd22c36ea34b1ca851c79bf6a9c433ea82923)), closes [#2477](https://github.com/James-Frowen/Mirror/issues/2477)
* ChangeOwner now adds/removes from owned hashset ([a35c0db](https://github.com/James-Frowen/Mirror/commit/a35c0dbd9a69779f0fa1fc6f5b6e4014ca5bcefd))
* Chat Example Authenticator ([44dfce9](https://github.com/James-Frowen/Mirror/commit/44dfce94b19782666981f0388d274babc0c2a2e8))
* **Chat Example:** moved playerNames HashSet to ChatAuthenticator ([b377d76](https://github.com/James-Frowen/Mirror/commit/b377d765ec36c8352ec24c5ed2f20fd92dbbf64e))
* Check NetworkServer.active in DestroyObject ([#2982](https://github.com/James-Frowen/Mirror/issues/2982)) ([895279e](https://github.com/James-Frowen/Mirror/commit/895279ee79f8da1045fc35f7a9e58a9ca7a1d959)), closes [#2977](https://github.com/James-Frowen/Mirror/issues/2977)
* CleanupNetworkIdentities needs to iterate a copied .spawned list becuase we now call DestroyObject directly. previously Destroy would call OnDestroy the next frame. ([0f069fc](https://github.com/James-Frowen/Mirror/commit/0f069fc848e3eb85569c183647ca6a2643b44b19))
* Clear hasAuthority when Unspawning ([#2927](https://github.com/James-Frowen/Mirror/issues/2927)) ([4efb0a6](https://github.com/James-Frowen/Mirror/commit/4efb0a64ffdf30eaabe72370e09b29a50ca42a81))
* Clear observers from other clients ([#2757](https://github.com/James-Frowen/Mirror/issues/2757)) ([456e098](https://github.com/James-Frowen/Mirror/commit/456e09854436f4be9076b1208f0d3312b7093566)), closes [#2737](https://github.com/James-Frowen/Mirror/issues/2737)
* clientAuthority access ([#2779](https://github.com/James-Frowen/Mirror/issues/2779)) ([d2ee497](https://github.com/James-Frowen/Mirror/commit/d2ee4979f70395bbbea4fc312d974a890ccd5bf5))
* ClientToServer [SyncVar] wouldn't be broadcast to other clients because server never set it dirty ([d5f7c4b](https://github.com/James-Frowen/Mirror/commit/d5f7c4bc011e73d81f1dedd3c732c19d14b1c06c))
* Correct version for Queue.TryDequeue ([c79c6d1](https://github.com/James-Frowen/Mirror/commit/c79c6d1e70e61fceefe4b432f956875bdb4c4b84)), closes [#3131](https://github.com/James-Frowen/Mirror/issues/3131)
* disable weaver registered twice logs on ILPP again ([e4305b9](https://github.com/James-Frowen/Mirror/commit/e4305b9d97c38e33ec091bd48b75bf711e299fbd))
* Disallow Child-NetworkIdentities in Scene objects ([#3492](https://github.com/James-Frowen/Mirror/issues/3492)) ([f84a385](https://github.com/James-Frowen/Mirror/commit/f84a385212196752a6a7563610170dfeff00b4ce))
* **Discovery Template:** wrapped OnValidate with `#if UNITY_EDITOR` ([5c7de2b](https://github.com/James-Frowen/Mirror/commit/5c7de2b6e0f86c2493f3251647c62d10a682028c))
* **Discovery:** Updated Network Discovery ([199ee49](https://github.com/James-Frowen/Mirror/commit/199ee490e5acc61d9d43f8b80394aa63fdc1b3fe))
* DistanceInterestManagement initial range check uses '<' instead of '<=' for consistency with the other range checks ([99316d6](https://github.com/James-Frowen/Mirror/commit/99316d6ab9cdd406e710541df3b887d9cfc76536))
* Don't call FinishLoadScene when customHandling ([#2794](https://github.com/James-Frowen/Mirror/issues/2794)) ([92334ba](https://github.com/James-Frowen/Mirror/commit/92334ba2aa148fa1a12ee15ea5cb985831291aee))
* Duplicate IL2CPP hashes when building to WebGL ([#3061](https://github.com/James-Frowen/Mirror/issues/3061)) ([#3072](https://github.com/James-Frowen/Mirror/issues/3072)) ([da09e71](https://github.com/James-Frowen/Mirror/commit/da09e715761cf41551ec89e53b0063c0d3d0df47))
* Eliminate potential errors in MatchInterestMgmt ([#2934](https://github.com/James-Frowen/Mirror/issues/2934)) ([f88190b](https://github.com/James-Frowen/Mirror/commit/f88190b756ddeca9b580fccaa9fa96929faa1dd1))
* ensure Serialize writes nothing at all if not dirty and add test so it's never missed again(!). ([e6886e8](https://github.com/James-Frowen/Mirror/commit/e6886e8a841054b81ea5daec9eeb5fb7f0c6df51))
* Examples code review and updates ([70cee43](https://github.com/James-Frowen/Mirror/commit/70cee43a710af8176fc3540e52972cefc515eafc))
* **Examples:** Updated to latest NT changes. ([1fda794](https://github.com/James-Frowen/Mirror/commit/1fda794f955bcafd1987767b9db769107c5169bf))
* **Examples:** Updated to latest NT changes. ([83a0593](https://github.com/James-Frowen/Mirror/commit/83a0593c981cdcf0f083349c614027b07846e540))
* Explicit types for default nullables ([#3020](https://github.com/James-Frowen/Mirror/issues/3020)) ([126f633](https://github.com/James-Frowen/Mirror/commit/126f6339ea55d10d87ad1559b5cd90ad52bbbb12))
* Extensions - Remove static StableHashes dictionary ([9e0c595](https://github.com/James-Frowen/Mirror/commit/9e0c59526ce5cd011a4c2f3a63a41f65860418d3))
* **FadeInOut:** Added OnValidate ([377f65a](https://github.com/James-Frowen/Mirror/commit/377f65a919d3040b338c9c2e17d037c5b8064c7c))
* failing NetworkClientTests ([#3500](https://github.com/James-Frowen/Mirror/issues/3500)) ([f11a7b4](https://github.com/James-Frowen/Mirror/commit/f11a7b44fe71a2c96a44c435918a98fdbf9640f3))
* FallbackTransport didn't propagate Early/LateUpdate ([9b160bc](https://github.com/James-Frowen/Mirror/commit/9b160bce5dd971ebe786546fd4e4f9bd02850eaa))
* Fix [#3349](https://github.com/James-Frowen/Mirror/issues/3349) - NetworkTransformReliable use correct value in OnSerialize ([b642da6](https://github.com/James-Frowen/Mirror/commit/b642da6b2fe2ea1099f3c72dcd988daa158bcd75))
* Fix delayed movement in client authority mode ([#2856](https://github.com/James-Frowen/Mirror/issues/2856)) ([9296573](https://github.com/James-Frowen/Mirror/commit/92965731d1d3422fb6936e80588db7be01f6a088))
* Fix vector3 long warnings ([#3281](https://github.com/James-Frowen/Mirror/issues/3281)) ([094b925](https://github.com/James-Frowen/Mirror/commit/094b9257970d8c806ce0254f1704581259f98b3d))
* Fixed additive scenes on host client ([fb608d6](https://github.com/James-Frowen/Mirror/commit/fb608d685a5aeda793d793a10358d7948bcf5aaf)), closes [#a0f5a846](https://github.com/James-Frowen/Mirror/issues/a0f5a846)
* Fixed Debug.Log lines ([de45f8d](https://github.com/James-Frowen/Mirror/commit/de45f8d199d94194d3dd10ed445f1f281e9d6418))
* fixed deprecated dates ([7366ba3](https://github.com/James-Frowen/Mirror/commit/7366ba3bffc146bb0afc523aabdf664a467956db))
* fixed naming typo ([cdf6d2c](https://github.com/James-Frowen/Mirror/commit/cdf6d2c90139b0e0c4212387222dcc27efc3e8d5)), closes [#2827](https://github.com/James-Frowen/Mirror/issues/2827)
* fixed order of fields in NT Base ([6bb97ab](https://github.com/James-Frowen/Mirror/commit/6bb97abd2dd4de1439b4b0c3b05914b95d81b57f))
* Fixed PlauerUI Text in Basic Example ([9fc5e0c](https://github.com/James-Frowen/Mirror/commit/9fc5e0c287b307610141d4633e4bb65b9f95a9b3))
* Fixed PlayerCamera scripts in examples ([e7cec4f](https://github.com/James-Frowen/Mirror/commit/e7cec4f943442d0c59670ef775eb75b6c70b3889))
* fixed warning in test ([e4281fe](https://github.com/James-Frowen/Mirror/commit/e4281fe5bfeee683d56115430d52a2570897b940))
* fixed warnings ([b659bde](https://github.com/James-Frowen/Mirror/commit/b659bde1115037d69c1dfacf27e37290b751fbcb))
* fixed warnings ([502d091](https://github.com/James-Frowen/Mirror/commit/502d0913d47ed14258feb5de4bf4af8b902b370d))
* Fixes [#3317](https://github.com/James-Frowen/Mirror/issues/3317) - NetworkTransformReliable: don't send last snapshot ([#3355](https://github.com/James-Frowen/Mirror/issues/3355)) ([a024753](https://github.com/James-Frowen/Mirror/commit/a024753a42dba9fec9d91bb0906350f0fd0d7be4))
* fixing NetworkDiagnostics receive for batching ([#2700](https://github.com/James-Frowen/Mirror/issues/2700)) ([aee7c82](https://github.com/James-Frowen/Mirror/commit/aee7c82dddaf7d4a81ef785e766dc3c28f1efb76))
* fixing use of new c# in 2020 ([#3507](https://github.com/James-Frowen/Mirror/issues/3507)) ([bd66be3](https://github.com/James-Frowen/Mirror/commit/bd66be3d1cb1d643ad120bf4efabea4f38af2d7d))
* forgot to remove SyncList OnSerializeAll log message ([d645aad](https://github.com/James-Frowen/Mirror/commit/d645aad95cb110e5e1139345f7c283605ef455bf))
* From !isLocalPlayer to !hasAuthority - NetworkTransform2k/NetworkTransformBase.cs ([#2855](https://github.com/James-Frowen/Mirror/issues/2855)) ([7e425d3](https://github.com/James-Frowen/Mirror/commit/7e425d3106e2dacc97fee46dd64f52a93c026358))
* host mode [SyncVar] setter hooks now support static functions again ([#3101](https://github.com/James-Frowen/Mirror/issues/3101)) ([4e91833](https://github.com/James-Frowen/Mirror/commit/4e91833c7d49d414d6bd7993bfd5359bff69a60c))
* host mode [SyncVar] setter hooks now support virtual / overwritten functions again ([#3102](https://github.com/James-Frowen/Mirror/issues/3102)) ([72973f4](https://github.com/James-Frowen/Mirror/commit/72973f484ad1b98d8939233502ebde9eb853ee25))
* Improved Player Controller in examples ([a3dbc9d](https://github.com/James-Frowen/Mirror/commit/a3dbc9dbb6ee3133cb4c163098b362a7d57e2ad3))
* Improved Portal script ([e0016e8](https://github.com/James-Frowen/Mirror/commit/e0016e815a19cd03de9376bc4cedb2a3fcc27b31))
* InterestManagement Awake ([893cb45](https://github.com/James-Frowen/Mirror/commit/893cb4590ab9d23b81b733f91503f6077bd793b9))
* InterestManagement.Awake is now protected virtual ([#3214](https://github.com/James-Frowen/Mirror/issues/3214)) ([4ea52a0](https://github.com/James-Frowen/Mirror/commit/4ea52a02830a67ba49f482af078928a0bc0017e3))
* kcp V1.23 - fixes [#3296](https://github.com/James-Frowen/Mirror/issues/3296) ([b91c702](https://github.com/James-Frowen/Mirror/commit/b91c7027a50ca3a83b38dcf0f35a077b9216dd6e))
* kcp2k V1.10 ([10c39a5](https://github.com/James-Frowen/Mirror/commit/10c39a59cc6682e3c7a10155f2791ff473d4d4d9)), closes [#17](https://github.com/James-Frowen/Mirror/issues/17) [#18](https://github.com/James-Frowen/Mirror/issues/18)
* kcp2k V1.12 ([d66d228](https://github.com/James-Frowen/Mirror/commit/d66d228079d53e5e446682e84dffacf31a89f0a6)), closes [#26](https://github.com/James-Frowen/Mirror/issues/26)
* kcp2k V1.12 (updated) ([6d021c0](https://github.com/James-Frowen/Mirror/commit/6d021c0875a28104d80a5f6e34c2b2daef780d7b))
* kcp2k V1.13 ([0a1bfad](https://github.com/James-Frowen/Mirror/commit/0a1bfade25c92ce7cde0fb0dfecf9c505e7c18b8)), closes [#2989](https://github.com/James-Frowen/Mirror/issues/2989)
* kcp2k V1.14 [2021-11-30] ([ee4399b](https://github.com/James-Frowen/Mirror/commit/ee4399b3ce185458cd5462fd3e3b8eab78b668c5))
* kcp2k V1.18 ([35f1f22](https://github.com/James-Frowen/Mirror/commit/35f1f225f32eaad5592eeacd8c84ef8364276c9e)), closes [#3155](https://github.com/James-Frowen/Mirror/issues/3155) [#3143](https://github.com/James-Frowen/Mirror/issues/3143)
* kcp2k V1.26 [2022-12-22] ([cd6e34f](https://github.com/James-Frowen/Mirror/commit/cd6e34f4b44e2ab22cd96158bcd20299bfdaf910))
* kcp2k V1.27. fixes [#3337](https://github.com/James-Frowen/Mirror/issues/3337) ([2c9f6c4](https://github.com/James-Frowen/Mirror/commit/2c9f6c4960645ba951fc36bc30bdb16019ea6643))
* kcp2k V1.32 KcpPeer RawInput now doesn't disconnect in case of random internet noise ([53658a5](https://github.com/James-Frowen/Mirror/commit/53658a58866251946b9d0cb63370029dd55b68f2))
* kcp2k V1.35. secure cookie to prevent UDP spoofing. fixes: [#3286](https://github.com/James-Frowen/Mirror/issues/3286) ([#3445](https://github.com/James-Frowen/Mirror/issues/3445)) ([ee957f3](https://github.com/James-Frowen/Mirror/commit/ee957f3fcd1ca45d569e28ed0ac7867eef8e7cfd))
* kcp2p V1.30 ([#3391](https://github.com/James-Frowen/Mirror/issues/3391)) ([228a577](https://github.com/James-Frowen/Mirror/commit/228a57768365a4b01b2eb48232ec06e1532f42d5))
* KcpServer.Stop now clears connections so they aren't carried over to the next session ([6be1a25](https://github.com/James-Frowen/Mirror/commit/6be1a253389e2a2e146bc6e157dd332bdb4e6e93))
* KcpTransport force disables nonalloc when building with IL2CPP ([#3030](https://github.com/James-Frowen/Mirror/issues/3030)) ([82d4259](https://github.com/James-Frowen/Mirror/commit/82d42591b6a9cac8966299a4df880bd4487d6ded))
* LatencySimulation error ([88825e4](https://github.com/James-Frowen/Mirror/commit/88825e45d56ff33b65c3a601fab5aee94af9bb64))
* LatencySimulation now flushes properly. fixes barely any packets getting through even on 0 settings ([47d5ecd](https://github.com/James-Frowen/Mirror/commit/47d5ecd776929405642ec527f6fc0be853bcfa2d))
* LatencySimulation now uses Time.unscaledTimeAsDouble for long running server precision ([666d1d7](https://github.com/James-Frowen/Mirror/commit/666d1d7df2e3836a90df8578cfce7197313e8c91))
* Lazy create telepathy client/server ([#2847](https://github.com/James-Frowen/Mirror/issues/2847)) ([7e72683](https://github.com/James-Frowen/Mirror/commit/7e72683850280db7c27ccb7d585001ee0ac78dbe))
* Match & Team Int Mgmt OnCheckObserver ([#3089](https://github.com/James-Frowen/Mirror/issues/3089)) ([46e6c61](https://github.com/James-Frowen/Mirror/commit/46e6c61da680deddd62e9593fedee6367843bcb4))
* MatchInterestManagement - use TryGetValue in OnDestroyed ([f67aa64](https://github.com/James-Frowen/Mirror/commit/f67aa64d59052d91b51abfa4c6e90d4541e317ea))
* MatchInterestManagement - Use TryGetValue in Update ([91c3439](https://github.com/James-Frowen/Mirror/commit/91c343994889385963aa726c03c1f0cc9e2565cd))
* Missed a couple NetworkConnectionToClient changes ([4e4e001](https://github.com/James-Frowen/Mirror/commit/4e4e001c925a577495269b6a155b2bf23390dd4d))
* moved MirrorIcon to Editor folder ([c18d15f](https://github.com/James-Frowen/Mirror/commit/c18d15fd1633cfd27afad7d4afe429e3d36340fc))
* Multiple Matches example transport to KCP ([ed29118](https://github.com/James-Frowen/Mirror/commit/ed291183f645c5056851e5dd6b1b1b9fdc5aec37))
* MultiplexTransport.ServerStart: AddServerCallbacks is only called once, not for each transport ([5991a9a](https://github.com/James-Frowen/Mirror/commit/5991a9a53a2e31d18dc50187d99e9653ca8c99e8))
* MultiSceneNetManager first client in first subscene ([9c8f89a](https://github.com/James-Frowen/Mirror/commit/9c8f89aec166f0636cebe3b5d1db0bb3e93ccac1))
* Network Manager - don't call OnClientConnect from FinishLoadScene ([42d4723](https://github.com/James-Frowen/Mirror/commit/42d4723f4ea918186ff766f5f5bf4fd5dccbb56d))
* Network Manager now calls OnClientConnect as soon as authenticated ([40e4a57](https://github.com/James-Frowen/Mirror/commit/40e4a57be289032b7d02be1b64f7a78dc0e60b7b))
* Network Manager Template singleton ([85e86bd](https://github.com/James-Frowen/Mirror/commit/85e86bd4a0d3ccdf06448cb68d4a77ada83e2cd4))
* Network Room Manager Update ([74f7cb1](https://github.com/James-Frowen/Mirror/commit/74f7cb168f5b1176d84c7f9bfd1c3128fb8b1068))
* NetworkAnimator uses double precision time for accuracy over days/weeks ([#2840](https://github.com/James-Frowen/Mirror/issues/2840)) ([7036ea5](https://github.com/James-Frowen/Mirror/commit/7036ea5cabc9743082c9344bfb1483f438ee0260))
* NetworkAuthenticator methods virtual ([c1e05d9](https://github.com/James-Frowen/Mirror/commit/c1e05d9df40fa84d60d4c40074d60d91868a6090))
* **NetworkAuthenticatorTemplate:** Added missing overrides ([638b353](https://github.com/James-Frowen/Mirror/commit/638b3536a5d3aaf40064fc1073f8fb0cd325f5a6))
* NetworkBehaviour dirty check uses double time ([#2839](https://github.com/James-Frowen/Mirror/issues/2839)) ([d516280](https://github.com/James-Frowen/Mirror/commit/d516280dca4bac460f2833397917b8d0655e0ac4))
* NetworkBehaviour OnValidate #ifdef adjusted for Unity 2020.3.19 support ([629e50e](https://github.com/James-Frowen/Mirror/commit/629e50e4f9dd6a85ae17ee491aea268e163b85b5))
* NetworkBehaviour SendRPCInternal error message fixed. This can happen if an RPC is called after shutting down the server - which doesn't mean that it was called on a client. ([26e83ce](https://github.com/James-Frowen/Mirror/commit/26e83ce645766a090b739013f8c57aa934112b84))
* NetworkBehaviour SyncVar uses netId lookup ([#3386](https://github.com/James-Frowen/Mirror/issues/3386)) ([94bb369](https://github.com/James-Frowen/Mirror/commit/94bb3690ae73b48622a58e0a55d34d6ff44a7d00)), closes [#2939](https://github.com/James-Frowen/Mirror/issues/2939)
* NetworkBehaviour.OnStopClient Called Twice ([a72d24f](https://github.com/James-Frowen/Mirror/commit/a72d24ff730c7630fa5631ae032027e86918ae95)), closes [#2976](https://github.com/James-Frowen/Mirror/issues/2976)
* NetworkBehaviour.OnValidate can't find parent NetworkIdentity because both the Unity define and GetComponentInParent() are broken in 2023.3 LTS. ([4ec8036](https://github.com/James-Frowen/Mirror/commit/4ec80368f6fea01d09d5936ea36e2721a43c3f87))
* NetworkBehaviourInspector 'had no target' warning ([8cd1332](https://github.com/James-Frowen/Mirror/commit/8cd13328ca8e9640f99a67ff0fab2a6c8688c646))
* NetworkClient - Check for duplicate sceneid ([c35ddd2](https://github.com/James-Frowen/Mirror/commit/c35ddd20db60648a697cd8c6a50edddd13d77016))
* NetworkClient - Check for duplicate sceneId ([#3157](https://github.com/James-Frowen/Mirror/issues/3157)) ([d3fa0c6](https://github.com/James-Frowen/Mirror/commit/d3fa0c67e59d8e8f8e6904407d059f9ebb7e1cca))
* NetworkClient - make OnGUI public ([655d0b0](https://github.com/James-Frowen/Mirror/commit/655d0b0aa8ee51ba88ad1ed8a9037d7f349b1bda))
* NetworkClient ConnectHost now initializes time interpolation as well ([fe6147d](https://github.com/James-Frowen/Mirror/commit/fe6147dd4d015f3d56ea02b2a84ae76e1418e0a4))
* NetworkClient now only tries to broadcast every sendInterval. otherwise ClientToServer NetworkTransform components (which have syncInterval=0) would sync every single tick. prepare for NT V3 as well. ([723da0c](https://github.com/James-Frowen/Mirror/commit/723da0cecc563531fb70a08840e6b3dfa3dd0725))
* NetworkClient now sets NetworkIdentity.connectionToServer before OnStartAuthority/OnStartClient callbacks. ([8d8bde7](https://github.com/James-Frowen/Mirror/commit/8d8bde72f42c074f58ef66716b0f372a6380b5e5))
* NetworkClient TimeInterpolation: add 'current' bufferTimeMultiplier field to not overwrite the initial SnapshotSettings.bufferTimeMultiplier. Allows us to reset bufferTimeMultiplier in InitTimeInterpolation and prepares for ConnectionQuality. ([c599fb6](https://github.com/James-Frowen/Mirror/commit/c599fb616e082a3ba2b0df343e8b886986a0b42b))
* NetworkClient unbatcher is now reset in host mode connect as well [credit: BigBoxVR] ([e58e47f](https://github.com/James-Frowen/Mirror/commit/e58e47fc4770da87d08c0667bba1ba8f6d254c4b))
* NetworkClient.Disconnect NullReferenceException if connection was null ([e6b27cf](https://github.com/James-Frowen/Mirror/commit/e6b27cf7e8445ecf7538335a5016ecad699d95ac))
* NetworkClient.OnHostClientSpawn now sets AOI visibility before invoking user callbacks. ([e9e3874](https://github.com/James-Frowen/Mirror/commit/e9e3874205bc7ceec405de0ecb7dd3f08e7f0230))
* NetworkClient.OnTransportData header size is now checked before every message unpacking again like before batching. ([e6b379f](https://github.com/James-Frowen/Mirror/commit/e6b379fb8ddb8a57ade5beaeab2e45e0b35673e4))
* NetworkClient.sendRate is now coupled to NetworkServer.sendRate in order to avoid snapshot interpolation errors where server & client may be on different send rates, components use the wrong rate to send vs. interpolate, etc. ([1176494](https://github.com/James-Frowen/Mirror/commit/1176494587c2956f11ab7bf5f48576323652e02d))
* NetworkClient.Shutdown - added all statics ([78690e7](https://github.com/James-Frowen/Mirror/commit/78690e7c0d9df38e9e95e9678732e212c1279ebb))
* NetworkClient.Shutdown now clears OnDis/ConnectedEvents ([e827c6c](https://github.com/James-Frowen/Mirror/commit/e827c6c0f3ed5f3321befb4a29bb1442f552608b))
* NetworkConnection "cannot send packet larger than ..." message now includes the message type which was too large. ([#3560](https://github.com/James-Frowen/Mirror/issues/3560)) ([9311ef3](https://github.com/James-Frowen/Mirror/commit/9311ef3523edb22521939d82719b84780b8d166d))
* NetworkConnectionToClient in Authenticators ([a88b037](https://github.com/James-Frowen/Mirror/commit/a88b03739f0d5716f060bf5c97451d274f96b659))
* NetworkDiscovery BroadcastAddress exposed for iOS support ([#3255](https://github.com/James-Frowen/Mirror/issues/3255)) ([fb95c41](https://github.com/James-Frowen/Mirror/commit/fb95c411efc2e83e2205259516be8812d3ad76f8))
* NetworkIdentity default execution order set to -1. guarantees Awake() initializing all NetworkBehaviours before their Awake is called. [imer, FakeByte] ([3efc917](https://github.com/James-Frowen/Mirror/commit/3efc917b6ea4e55177be2dabe49d24f31deb5cfa))
* NetworkIdentity.AssignAssetId() is now saved properly. fixes a bug where duplicated prefabs and prefab variants would still have the original prefab's assetId on disk, even though the Inspector showed the proper one. ([d7fbee9](https://github.com/James-Frowen/Mirror/commit/d7fbee9d5036d6246519354bc283e3984b3dd147))
* NetworkIdentity.MaxNetworkBehaviours and EnsureMax function so we have the same code in both places, where previously Serialize() still checked for 255 instead of 64 ([9dd04e2](https://github.com/James-Frowen/Mirror/commit/9dd04e2efad7ea2f377e5a07c89cae9dc7da121e))
* NetworkLerpRigidbody now uses double time to keep precision over multiple days ([5abc261](https://github.com/James-Frowen/Mirror/commit/5abc261320a7028031e2d82d82c1dda22916c7c9))
* NetworkLoop now only runs in play mode, not in edit mode ([def24f8](https://github.com/James-Frowen/Mirror/commit/def24f85103ed6ccda9eee8bf221f38583991b80))
* NetworkManager - handle StopClient in Host mode ([a83379f](https://github.com/James-Frowen/Mirror/commit/a83379fe1743c27314ca8058808b1aeadb0a88ac))
* NetworkManager - keep in DDOL if ServerOnly ([3d9e95e](https://github.com/James-Frowen/Mirror/commit/3d9e95e52cc14889c74dc50c510d4ecdda83a248))
* NetworkManager now always applies the exposed NetworkServer.send/tickRate. fixes a bug where some NetworkBehaviours may try to send with NetworkServer.tickRate, which wouldn't be available on client because NetworkManager.StartServer was never called, so the rate was never set. ([8d3d623](https://github.com/James-Frowen/Mirror/commit/8d3d623fac6a12e3974593d25e7f8d8b74558783))
* networkmanager undo and move some validation into Reset() ([#2990](https://github.com/James-Frowen/Mirror/issues/2990)) ([b2ce342](https://github.com/James-Frowen/Mirror/commit/b2ce3421e50dc6082d207febc703a60c7798d976))
* **NetworkManager:** Call OnServerDisconnect for Host Client ([#3419](https://github.com/James-Frowen/Mirror/issues/3419)) ([ff5115e](https://github.com/James-Frowen/Mirror/commit/ff5115e04a10af2219d3d64cb8ddb489862d6e47))
* **NetworkManagerTemplate:** Updated OnServerError / OnClientError comments ([a30c85d](https://github.com/James-Frowen/Mirror/commit/a30c85d38917e408607f2e678df6e558d17eeecf))
* **NetworkManager:** Try to avoid missing transport errors ([#3456](https://github.com/James-Frowen/Mirror/issues/3456)) ([bae0c37](https://github.com/James-Frowen/Mirror/commit/bae0c37679f553750fb3cb9db3f583a2e4485299))
* NetworkMessages.MaxContentSize now considers channelId instead of always assuming reliable ([6830a6e](https://github.com/James-Frowen/Mirror/commit/6830a6e52c1b56d92a2fbc99f0ff03550532ebdd))
* NetworkReader.ReadTexture2D fixed 'reader not found for Color32[]' error when using it from tests ([d235037](https://github.com/James-Frowen/Mirror/commit/d235037954d5a235dfed84a4401dc81867ddc381))
* NetworkReader/Writer Texture2D now sends dimensions too. fixes "Texture2D.SetPixels32: size of data to be filled was larger than the size of data available in the source array. (Texture '')" ([b709453](https://github.com/James-Frowen/Mirror/commit/b70945305763ee97ecea893b60fd289ca0f5f97c))
* NetworkRigidbody now uses double time to keep precision over multiple days ([e473d15](https://github.com/James-Frowen/Mirror/commit/e473d154d9e7b2c6ecec29fd61d34b880c8c089d))
* NetworkRigidbody/2D now uses .target's Rigidbody and supports child Rigidbodies ([b49f5b3](https://github.com/James-Frowen/Mirror/commit/b49f5b39dedfeb1b83926d0576e05d5c7b4799ce))
* NetworkRoomManager.ReadyStatusChange is now a virtual method ([80211ba](https://github.com/James-Frowen/Mirror/commit/80211ba8275ffe5a585c3fc6d948394b0f60d2eb)), closes [#1889](https://github.com/James-Frowen/Mirror/issues/1889)
* NetworkServer Shutdown - added OnErrorEvent = null ([950c0cb](https://github.com/James-Frowen/Mirror/commit/950c0cbbd8d099c63206cc766dc26efe86072012))
* NetworkServer.DisconnectAll doesn't set inactive anymore. it should simply "disconnect all" connections. ([74e6b72](https://github.com/James-Frowen/Mirror/commit/74e6b72239ffdeaa053cf1679525f9ee3ac4c49a)), closes [#3344](https://github.com/James-Frowen/Mirror/issues/3344)
* NetworkServer.OnTransportData header size is now checked before every message unpacking again like before batching. ([bdb410e](https://github.com/James-Frowen/Mirror/commit/bdb410e015b121264fd3ca2d961d1197230aefe9))
* NetworkServer.Shutdown - Reset more things ([0ab31c0](https://github.com/James-Frowen/Mirror/commit/0ab31c0c96a3d92c5ac04912e7338336f4f4f1fc))
* NetworkServer.Shutdown now clears OnDis/ConnectedEvents ([68a4a06](https://github.com/James-Frowen/Mirror/commit/68a4a0692660a22dc3564aaee69520d4465ff7e7))
* NetworkServer/NetworkClient batch processing now detects ever growing batches (as caused by [#2882](https://github.com/James-Frowen/Mirror/issues/2882)) ([3e4def1](https://github.com/James-Frowen/Mirror/commit/3e4def126fe7293b8cd702e318aeba749c78b4a5))
* **NetworkServer:** Don't disconnect on OnEntityStateMessage for object without authority ([#3439](https://github.com/James-Frowen/Mirror/issues/3439)) ([40361f6](https://github.com/James-Frowen/Mirror/commit/40361f62bf953944eeefd6f5b0a80996e684aeea))
* NetworkStartPosition use Start instead of Awake ([29fec27](https://github.com/James-Frowen/Mirror/commit/29fec273cb180a37fdccb48b2aa8029fb50aecec))
* NetworkStatistics Unity 2019 support ([8f357d5](https://github.com/James-Frowen/Mirror/commit/8f357d5961f15cc615078e94f279dcd32aa61aa9))
* NetworkStatistics Unity 2019 support (part two) ([4b207d2](https://github.com/James-Frowen/Mirror/commit/4b207d2994477e90e15bcecf8265f97b386318ff))
* NetworkTime RTT now checks for malicious timestamps from the future ([ac6a881](https://github.com/James-Frowen/Mirror/commit/ac6a881f1bdc15c20ab220ac6ff5807bb1016228))
* NetworkTime.UpdateClient uses double precision time for accuracy over days/weeks ([69116bf](https://github.com/James-Frowen/Mirror/commit/69116bfeb2e95b42c980fa41fc39f3c2aef27fb9))
* NetworkTransform classes - methods in call order ([dd5d7ca](https://github.com/James-Frowen/Mirror/commit/dd5d7cab0138d6aed4d3b446fefca28d079d6d34))
* NetworkTransform now always sends at the same sendInterval as time interpolation. as configured in NetworkManager. ([25d0e79](https://github.com/James-Frowen/Mirror/commit/25d0e7929ada755d013c2659be2fb1beb509e282))
* NetworkTransform syncs initial position/rotation/scale [#3048](https://github.com/James-Frowen/Mirror/issues/3048) ([#3051](https://github.com/James-Frowen/Mirror/issues/3051)) ([a828f5a](https://github.com/James-Frowen/Mirror/commit/a828f5a983e142f29d0b264354988e4466764ef6))
* **NetworkTransformeliable:** fix offset and sendIntervalMultiplier ([#3438](https://github.com/James-Frowen/Mirror/issues/3438)) ([238233d](https://github.com/James-Frowen/Mirror/commit/238233da3f7943c1fda793668c8d2b463b8ec2f9))
* NetworkTransformReliable fix jitter (fixes: [#3368](https://github.com/James-Frowen/Mirror/issues/3368)) ([#3410](https://github.com/James-Frowen/Mirror/issues/3410)) ([7137ace](https://github.com/James-Frowen/Mirror/commit/7137ace5fd6c53ff4e60278d43259e8973cc5b16))
* NetworkTransformReliable Reset() now resets 'last' too ([25ebb06](https://github.com/James-Frowen/Mirror/commit/25ebb0620bfc0577fd129300541fb0aea5053454))
* **NetworkTransformReliable:** Removed unused onlySyncOnChangeInterval ([ae40fcb](https://github.com/James-Frowen/Mirror/commit/ae40fcbddda5fcd80d320a47b3e8e3619d1ed57c))
* NetworkTransformUnreliable: timeStampAdjustment, timelineOffset to fix 2s jitter after tab switching in webgl caused by NT snaps potentially arriving behind timeline snaps ([#3441](https://github.com/James-Frowen/Mirror/issues/3441)) ([12ebd7f](https://github.com/James-Frowen/Mirror/commit/12ebd7f722009af4b06f561574b85cf85c10ba16))
* NetworkWriter - Change MaxStringLength to ushort.MaxValue ([#3374](https://github.com/James-Frowen/Mirror/issues/3374)) ([e260d1e](https://github.com/James-Frowen/Mirror/commit/e260d1eb2a07a839fc926a4d422dc62deb2fec74))
* NetworkWriterExtensions:WriteTexture2D call WriteArray instead of Write ([2f76c73](https://github.com/James-Frowen/Mirror/commit/2f76c73c413a24cc58d44c702c7e2f245f464f3c))
* never use custom NB writers for SyncVars ([#3387](https://github.com/James-Frowen/Mirror/issues/3387)) ([cfe27a1](https://github.com/James-Frowen/Mirror/commit/cfe27a179b5d5125746d27d8f8c9cb0177f4ba49)), closes [/github.com/MirrorNetworking/Mirror/issues/2680#issuecomment-1435093212](https://github.com//github.com/MirrorNetworking/Mirror/issues/2680/issues/issuecomment-1435093212) [#2680](https://github.com/James-Frowen/Mirror/issues/2680)
* nimoyd unbatcher InvalidOperationException ([#2812](https://github.com/James-Frowen/Mirror/issues/2812)) ([80387ff](https://github.com/James-Frowen/Mirror/commit/80387ffa03b3a0eef3a010f008d0d74c69bd3158))
* NT Base OnDrawGizmos only when playing ([#2876](https://github.com/James-Frowen/Mirror/issues/2876)) ([33e77d6](https://github.com/James-Frowen/Mirror/commit/33e77d69cbb298089b29888e65537096c46a1312))
* NT checks NetworkClient.ready ([#2992](https://github.com/James-Frowen/Mirror/issues/2992)) ([2710a95](https://github.com/James-Frowen/Mirror/commit/2710a95a0c1c7af48b07e0ceb3c8e4a639c70732))
* NT2 - public virtual void Reset ([bd562a6](https://github.com/James-Frowen/Mirror/commit/bd562a609bf7b098d7dad4c92bfca8e92bd9d0a7))
* NTv2 interpolateScale default false, like syncScale ([9c4cc29](https://github.com/James-Frowen/Mirror/commit/9c4cc2926f439727f16e7de77c9ff3d0e1bc1bf1))
* null handling in WriteUri & ReadUri ([#2796](https://github.com/James-Frowen/Mirror/issues/2796)) ([e07488d](https://github.com/James-Frowen/Mirror/commit/e07488d91b2154606f7a7f2630d2d72379024331))
* Obsolete NetworkConnection param in client callbacks ([#2820](https://github.com/James-Frowen/Mirror/issues/2820)) ([d604891](https://github.com/James-Frowen/Mirror/commit/d6048911f2f4cb9850673ac96881211a155237c4))
* Obsolete SyncObject Flush method ([#2931](https://github.com/James-Frowen/Mirror/issues/2931)) ([185a6c3](https://github.com/James-Frowen/Mirror/commit/185a6c38156bdd6ed3cf8f5d6bff1a22af0955be))
* OnClientChangeScene not firing for host client ([#2801](https://github.com/James-Frowen/Mirror/issues/2801)) ([a0f5a84](https://github.com/James-Frowen/Mirror/commit/a0f5a846d703c43ff4583594aabc0d87b9507d91))
* only IEnumerable SyncObjects are drawn as SyncObject Collections in Inspector now. ([9aa8353](https://github.com/James-Frowen/Mirror/commit/9aa83539bb469f7496abd65d61948c23e8779bc6))
* onlySendOnMove for new NetworkTransform ([#3013](https://github.com/James-Frowen/Mirror/issues/3013)) ([3d78235](https://github.com/James-Frowen/Mirror/commit/3d78235d05a8d5c8d4e6fe185506e988395fd989))
* OverrideVirtualWithBaseCallsBothVirtualAndBase etc. failing tests because Weaver Cmd/Rpc SubstitueMethods couldn't be accessed by inheriting classes ([ff218ad](https://github.com/James-Frowen/Mirror/commit/ff218adc17c14b67309f10169b34fa4bf7440ecc))
* PrepareToSpawnSceneObjects checks netId instead of activeSelf [fixes: [#3541](https://github.com/James-Frowen/Mirror/issues/3541)] ([#3543](https://github.com/James-Frowen/Mirror/issues/3543)) ([51c7162](https://github.com/James-Frowen/Mirror/commit/51c7162af7569061376cf314bd3ca4d5de6e33e0))
* Prevent m_AssetId set to empty string ([#2766](https://github.com/James-Frowen/Mirror/issues/2766)) ([8218979](https://github.com/James-Frowen/Mirror/commit/8218979e32ad15ea1a7055caa038c38280bdce3f)), closes [#2765](https://github.com/James-Frowen/Mirror/issues/2765)
* Prevent recursion overflow when stopping ([#2833](https://github.com/James-Frowen/Mirror/issues/2833)) ([32fdd52](https://github.com/James-Frowen/Mirror/commit/32fdd5215fb02f67935a4359ea285d3fba54772c)), closes [#2080](https://github.com/James-Frowen/Mirror/issues/2080)
* Prevent StopClient from running twice ([#2953](https://github.com/James-Frowen/Mirror/issues/2953)) ([532ca65](https://github.com/James-Frowen/Mirror/commit/532ca654dda4a476b02aa7f6b591f3abcbdb9d4a)), closes [#2940](https://github.com/James-Frowen/Mirror/issues/2940)
* Raise OnDisconnectedEvent before changing ConnectState ([#2870](https://github.com/James-Frowen/Mirror/issues/2870)) ([95de1a3](https://github.com/James-Frowen/Mirror/commit/95de1a3aae63b6b31e6950a9002ead8d73de979a))
* Reader / Writer extensions for Unity structs with properties ([#3426](https://github.com/James-Frowen/Mirror/issues/3426)) ([4ce8b2a](https://github.com/James-Frowen/Mirror/commit/4ce8b2a4317dadd9b684cbd1e87dd08ab05a719d))
* Remove all usage of Time.timeAsDouble ([#3436](https://github.com/James-Frowen/Mirror/issues/3436)) ([70e972a](https://github.com/James-Frowen/Mirror/commit/70e972aeb59c52e05f622d6dc704fff33d728fa4))
* remove redundant RPC buffering. saved bandwidth, but introduced data races, complexity, extra buffer copies [credit: James, imer] ([#3497](https://github.com/James-Frowen/Mirror/issues/3497)) ([adee4ad](https://github.com/James-Frowen/Mirror/commit/adee4ad1401b51d4768551447bc7e0d606895bf3))
* Removed buggy canvas from example player prefabs ([cbcfeed](https://github.com/James-Frowen/Mirror/commit/cbcfeede161b687418a9dbb2dc6b1a14b0496359))
* Removed invalid reference from KCP AsmDef ([900c23a](https://github.com/James-Frowen/Mirror/commit/900c23a1737eea573e8a292f3c499ed8d3c66def))
* Removed ServerAuthFailed from Basic Authenticator ([ca4c2fd](https://github.com/James-Frowen/Mirror/commit/ca4c2fd9302b1ece4240b09cc562e25bcb84407f))
* Replaced obsolete warnings on NetworkVisibility components ([f73cc91](https://github.com/James-Frowen/Mirror/commit/f73cc91af1b00e85a0c23019a798c0f7d80a6833))
* Reset lastPingTime ([#2832](https://github.com/James-Frowen/Mirror/issues/2832)) ([8453a03](https://github.com/James-Frowen/Mirror/commit/8453a03bd4bb51890e4f2cb0f454cbc332f37c47))
* restored base method calls to NetworkRoomManager ([16e2539](https://github.com/James-Frowen/Mirror/commit/16e2539efbd05c6f670f3f827f83efc81566a527))
* RuntimeInitializeOnLoadMethod BeforeSceneLoad ([473b9f1](https://github.com/James-Frowen/Mirror/commit/473b9f17609ecc7f19cd7291eb9f4c79daca1ffa))
* SceneInterestManagement - use TryGetValue in OnDestroyed ([12c83ef](https://github.com/James-Frowen/Mirror/commit/12c83effbb72dfaacda9d73681786a145d458820))
* SceneInterestManagement - Use TryGetValue in Update ([c0908a2](https://github.com/James-Frowen/Mirror/commit/c0908a2f58086ae77d65b934d6e64a88223e7b1a))
* SceneInterestManagement OnCheckObserver uses identity.gameObject instead of own gameObject ([fecfcd3](https://github.com/James-Frowen/Mirror/commit/fecfcd3378d6e6132fd932ae6741ffae5f3e6cb6))
* SceneInterestManagement OnSpawned uses identity.gameObject instead of own gameObject ([02ad57c](https://github.com/James-Frowen/Mirror/commit/02ad57cae8eaa94c429085c6d6f6daeae3ed5b56))
* SendChangeOwnerMessage robustness ([d6d0ec8](https://github.com/James-Frowen/Mirror/commit/d6d0ec88d0243f5312f8090ff3443ba39ba67b09)), closes [#2988](https://github.com/James-Frowen/Mirror/issues/2988)
* serialization precision over days by using frameCount instead of single precision time ([#2815](https://github.com/James-Frowen/Mirror/issues/2815)) ([188be9e](https://github.com/James-Frowen/Mirror/commit/188be9ead0b2bca3739015b9d7526f305feeadfb))
* set offline mode before OnStopClient ([be5cd64](https://github.com/James-Frowen/Mirror/commit/be5cd6472ac2c73a21994eb062830e8dc9c7ea28)), closes [#2080](https://github.com/James-Frowen/Mirror/issues/2080)
* Set previousLocalPlayer null in NI.Reset ([#2993](https://github.com/James-Frowen/Mirror/issues/2993)) ([3092c00](https://github.com/James-Frowen/Mirror/commit/3092c005aefe6658041ba4b65ed3fe5b03dde414))
* SetClientNotReady must always notify client ([78275ab](https://github.com/James-Frowen/Mirror/commit/78275ab5583f19ffedf09bd00eef96c3674d6d8a))
* Shutdown Discovery in OnDisable / OnDestroy ([#2736](https://github.com/James-Frowen/Mirror/issues/2736)) ([b4e8153](https://github.com/James-Frowen/Mirror/commit/b4e81537c9763fb64d960fba489c36c87fcf0da2))
* **simpleWeb:** ignore headers case when checking handshake key ([#3016](https://github.com/James-Frowen/Mirror/issues/3016)) ([31d2830](https://github.com/James-Frowen/Mirror/commit/31d2830f9b6217a0de08685efe6823ad7b56b25f))
* **SimpleWebTransport:** Check hasDisposed in Connection.ToString ([f7fe570](https://github.com/James-Frowen/Mirror/commit/f7fe570c0873cc3a6becfdf9d871e0a32cf96af7))
* **SimpleWebTransport:** Default sslProtocols to Tls12 ([31fa8a4](https://github.com/James-Frowen/Mirror/commit/31fa8a4b3cbac83a4d5fb435af41a069c56fe9b4))
* **SimpleWebTransport:** fixed ClientUseDefaultPort default ([0949665](https://github.com/James-Frowen/Mirror/commit/09496652b73b023e8730dd3e29100f1ba8b69cb5))
* **SimpleWebTransport:** Improved tooltips ([22d4fb6](https://github.com/James-Frowen/Mirror/commit/22d4fb62bb0aec61ba524d3c9ae7762e114bc693))
* Simplified Portal script ([4ab5924](https://github.com/James-Frowen/Mirror/commit/4ab59248abe84aed8f30fd2cf53bc8f97e9f62bb))
* Snapshot Interpolation Demo: assign material color to instanced material, fixes material asset changing color permanently ([db50c39](https://github.com/James-Frowen/Mirror/commit/db50c39b918d42b21eb9d0b24319e8ca75f30d19))
* Snapshot Interpolation Example: latency was accidentally applied to remoteTime instead of delivery time ([1b0901e](https://github.com/James-Frowen/Mirror/commit/1b0901e966b80984a7fe487cd54c89c5b5d4ef24))
* SnapshotInterpolation.Insert() now has a bufferLimit to avoid ever growing snapshot buffers on extremely low-fps clients ([37bbd7e](https://github.com/James-Frowen/Mirror/commit/37bbd7eb3ddc28fb21d23d9c2621d6d09e94e27c))
* SnapshotInterpolation.TimelineClamp uses Mathd.Clamp for Unity 2020 support ([844fe69](https://github.com/James-Frowen/Mirror/commit/844fe69e11f8e2762585e2b383665cdad289d415))
* **SnapshotInterpolation:** Added TimelineClamp ([#3402](https://github.com/James-Frowen/Mirror/issues/3402)) ([313c7a1](https://github.com/James-Frowen/Mirror/commit/313c7a18cda59d9ec45b929cfb9d90620e952803))
* Stop Discovery when client gets into Connected state ([26a7a2f](https://github.com/James-Frowen/Mirror/commit/26a7a2f76a7746e87f4610917365842aebe9a71d))
* Suppress Commands When Not Ready ([#3009](https://github.com/James-Frowen/Mirror/issues/3009)) ([c291932](https://github.com/James-Frowen/Mirror/commit/c29193271771b7a4b911e9fb2db89d0c26d52122))
* SWT header lookup needs to be case insensitive ([#3176](https://github.com/James-Frowen/Mirror/issues/3176)) ([d48d59c](https://github.com/James-Frowen/Mirror/commit/d48d59cc08c59171957935b3fd54add29d8ea13c)), closes [#3175](https://github.com/James-Frowen/Mirror/issues/3175)
* **SWT:** fixing jslib for Unity2021 ([#3084](https://github.com/James-Frowen/Mirror/issues/3084)) ([b62fbf5](https://github.com/James-Frowen/Mirror/commit/b62fbf51b5eb7fff4359ce33f8961207c998a35a))
* SyncVarGameObject/NetworkIdentityEqual not being accessible by weaved NetworkBehaviour components from outside assemblies ([0e0e4df](https://github.com/James-Frowen/Mirror/commit/0e0e4dfe47b532390108dc442b1276ee7cc55076))
* Tanks demo: remove light from projectile as well to fix visual glitches ([0fbf400](https://github.com/James-Frowen/Mirror/commit/0fbf40069761d368dd3b39da08da83c7267a6bfd))
* Tanks demo: remo…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants