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

feat: user friendly weaver error messages #896

Merged
merged 1 commit into from
Jun 9, 2019

Conversation

paulpach
Copy link
Contributor

@paulpach paulpach commented Jun 8, 2019

Updated weaver error messages to make them easier for users to fix. For example:

Before:

Screen Shot 2019-06-08 at 5 29 28 PM

After:

Screen Shot 2019-06-08 at 5 28 36 PM

@miwarnec
Copy link
Collaborator

miwarnec commented Jun 9, 2019

great

@miwarnec miwarnec merged commit 954a3d5 into MirrorNetworking:master Jun 9, 2019
@miwarnec
Copy link
Collaborator

miwarnec commented Jun 9, 2019

🎉 This PR is included in version 3.8.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

@paulpach paulpach deleted the weavererrors branch June 9, 2019 13:29
tomkrikorian pushed a commit to realcast/Mirror that referenced this pull request Sep 30, 2019
github-actions bot referenced this pull request in MirageNet/Mirage Jan 4, 2020
# 1.0.0 (2020-01-04)

### Bug Fixes

* (again) Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([46eddc0](46eddc0))
* [#1359](https://github.com/MirrorNG/MirrorNG/issues/1359). Revert "Destroy objects owned by this connection when disconnecting ([#1179](#1179))" ([4cc4279](4cc4279))
* [#573](#573) (part 1) NetworkScenePostProcess handles NetworkIdentities of all scenes except DontDestroyOnLoad. this way it works for additively loaded scenes too. ([c1af84e](c1af84e))
* [#573](#573) (part 2) NetworkManager detects additive scene loads and respawns objects on server/client again ([e521a20](e521a20))
* [#573](#573) NullReferenceException because destroyed NetworkIdentities were never removed from sceneIds dict ([a2d6317](a2d6317))
* [#609](#609) by spawning observers in NetworkServer.AddPlayerForConnection after setting the controller. There is no point in trying to spawn with a null controller in SetReady, because by definition no one can observer something that is null. ([#623](#623)) ([5c00577](5c00577))
* [#640](#640) InternalReplacePlayerForConnection calls SpawnObserversForConnection now too ([bdf12c8](bdf12c8))
* [#651](#651) GetSceneAt assumes default scene ([#654](#654)) ([65eaba1](65eaba1))
* [#652](#652) OnPostProcessScene includes disabled NetworkIdentities in scene ([ee2ace8](ee2ace8))
* [#679](#679) package for unity ([4a6a4df](4a6a4df))
* [#679](#679) unity package ([9895647](9895647))
* [#692](#692) by always adding connectionToClient when rebuilding observers ([ab44ac8](ab44ac8))
* [#718](#718) remove Tests folder from unitypackage ([#827](#827)) ([7e487af](7e487af))
* [#791](#791) corrected assembly paths passed to weaver ([#803](#803)) ([3ba546e](3ba546e))
* [#791](#791) stack overflow in the weaver ([#792](#792)) ([7b57830](7b57830))
* [#840](#840) by allowing Mirror to respect the forceHidden flag ([#893](#893)) ([3ec3d02](3ec3d02))
* added new read/write symbol params ([#806](#806)) ([3a50ca6](3a50ca6))
* Added WriteBytesAndSize tests, and fixed the function to be pedantic. ([#773](#773)) ([72e4e55](72e4e55))
* Additive scene can respawn objects safely ([#1270](https://github.com/MirrorNG/MirrorNG/issues/1270)) ([8899d20](8899d20))
* ArraySegment<byte> work in Messages ([#919](#919)) ([981ba7c](981ba7c))
* Call hooks when initializing objects OnStartServer on host ([#1249](https://github.com/MirrorNG/MirrorNG/issues/1249)) ([7aa7815](7aa7815))
* call Obsoleted OnStartClient ([#681](#681)) ([8dea50e](8dea50e))
* call OnStartClient only once in room ([#1264](https://github.com/MirrorNG/MirrorNG/issues/1264)) ([4d373c5](4d373c5))
* check event prefix ([7417b68](7417b68))
* ClientRpc methods now work accross assemblies ([#1129](#1129)) ([13dbcb9](13dbcb9)), closes [#1128](#1128)
* Cmds can be called from child classes in other assemblies ([d8a98d8](d8a98d8)), closes [#1108](#1108)
* code generation works with il2cpp again ([#1056](#1056)) ([8738562](8738562))
* destroy owned objects ([#1352](https://github.com/MirrorNG/MirrorNG/issues/1352)) ([d7a58d2](d7a58d2)), closes [#1346](https://github.com/MirrorNG/MirrorNG/issues/1346) [#1206](https://github.com/MirrorNG/MirrorNG/issues/1206) [#1351](https://github.com/MirrorNG/MirrorNG/issues/1351)
* do not accumulate changes if there are no observers fixes [#963](#963) ([#964](#964)) ([64a0468](64a0468))
* Do not call InternalAddPlayer twice ([#1246](https://github.com/MirrorNG/MirrorNG/issues/1246)) ([7119dd1](7119dd1))
* don't call hook in host if no change,  fixes [#1142](#1142) ([#1143](#1143)) ([d8ce80f](d8ce80f))
* don't call OnStartLocalPlayer twice ([#1263](https://github.com/MirrorNG/MirrorNG/issues/1263)) ([c753089](c753089))
* don't convert null arrays to empty array ([#913](#913)) ([dd758ca](dd758ca))
* Don't disconnect host ([#608](#608)) ([c1707e5](c1707e5))
* Don't give host player authority by default ([#1158](#1158)) ([1fc1ed2](1fc1ed2))
* Don't increment counter in Awake ([#971](#971)) ([45b7118](45b7118))
* Don't set asset id for scene objects ([7e40232](7e40232))
* Don't set framerate in host mode ([4644bc4](4644bc4))
* Don't throw exception getting address ([7df3ce3](7df3ce3))
* don't use obsolete method ([12437ba](12437ba))
* Draw SyncVar label for Unity objects inline  ([#1291](https://github.com/MirrorNG/MirrorNG/issues/1291)) ([a0425e4](a0425e4))
* Dummy file for SyncListStructProcessor.cs ([#798](#798)) ([75e4f15](75e4f15))
* error when there are no network behaviors ([#1303](https://github.com/MirrorNG/MirrorNG/issues/1303)) ([dbe0643](dbe0643))
* error with missing assemblies ([#1052](#1052)) ([00eb23a](00eb23a)), closes [#1051](#1051)
* Fix error scene error message in host mode ([838d4f0](838d4f0))
* hasAuthority is now visible in all overrides ([#1251](https://github.com/MirrorNG/MirrorNG/issues/1251)) ([2f19c7c](2f19c7c)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* hooks in host mode can call each other ([#1017](#1017)) ([f27fd0b](f27fd0b))
* invalid scene id in 2019.1 by ignoring prefabs in NetworkScenePostProcess ([203a823](203a823))
* isClient now reports true onStartServer in host mode ([#1252](https://github.com/MirrorNG/MirrorNG/issues/1252)) ([d00c95b](d00c95b))
* isLocalPlayer is true during OnStartClient for Player ([#1255](https://github.com/MirrorNG/MirrorNG/issues/1255)) ([fb26d00](fb26d00)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* isLocalPlayer works in host mode onStartServer ([#1253](https://github.com/MirrorNG/MirrorNG/issues/1253)) ([9acde20](9acde20)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* it is not safe to modify this outside this class ([bc7a961](bc7a961))
* list server logs properly when disconnected ([f02d317](f02d317))
* ListServer Ping not found in WebGL ([6c4b34b](6c4b34b))
* Lobby Remove button not showing for P1 when Server Only ([377c47c](377c47c))
* maintain Unity's copyright notice ([#961](#961)) ([7718955](7718955))
* Make assembly definition 2018.4 compatible ([99ecc9e](99ecc9e))
* make build pass ([08df6d0](08df6d0))
* Mark weaver as failed if serializing invalid type ([03c767d](03c767d))
* missed ushort reader/writer ([74faf2a](74faf2a))
* Mono.CecilX namespace to work around Unity 2019 Cecil namespace collision ([#832](#832)) ([5262592](5262592))
* move listserver classes into package ([2668b17](2668b17))
* move NetworkStreamExtension in a namespace ([12de543](12de543))
* MultiplexTransport GetMaxMessageSize NullReferenceException when called on server. And fixes potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes. ([#1332](https://github.com/MirrorNG/MirrorNG/issues/1332)) ([b3127be](b3127be))
* NetworkBehaviourInspector wouldn't show SyncMode if syncvars / syncobjects were only private ([ed572da](ed572da))
* NetworkClient.Shutdown calls ClientScene.Shutdown again to properly clean up client scene. ClientScene only cleans up itself without touching transport or NetworkIdentities (fixes the bug where the player object wouldn't be destroyed after calling StopClient) ([fb716df](fb716df))
* NetworkManager OnValidate wouldn't properly save the automatically added Transport before because Undo.RecordObject is needed for that now. ([524abfc](524abfc))
* NetworkTransform clientAuthority works again via clientAuthority option that is configurable in inspector. this had to be fixed after we removed local authority. ([d712cd0](d712cd0))
* non ready connections should not observe objects ([1352334](1352334))
* null reference exception ([7ce95c5](7ce95c5))
* OnClientReady is called and passed the appropriate ready state value in NetworkLobbyPlayer ([#618](#618)) ([c9eac57](c9eac57))
* OnSetHostVisibility can now check if it has authority ([888e46c](888e46c))
* pack works if message is boxed ([55c9bb6](55c9bb6))
* Pass the name of the invoking class and desired command when an object has no authority. ([#1216](https://github.com/MirrorNG/MirrorNG/issues/1216)) ([701f4f4](701f4f4))
* Potential DOS attack by sending invalid UTF8 byte sequences  ([#727](#727)) ([3cee3ab](3cee3ab))
* Potential DOS attack on server by sending packed ulongs when packed uints are expected. ([#730](#730)) ([015d0d5](015d0d5))
* potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes when using FallbackTransport. ([#1331](https://github.com/MirrorNG/MirrorNG/issues/1331)) ([5449840](5449840))
* potential null reference exception with debug logging ([33493a0](33493a0))
* Prevent Compiler Paradox ([#1145](#1145)) ([fd43c67](fd43c67))
* properly stop client and server in OnApplicationQuit so that clients still get a chance to send then 'quit' packet instead of just timing out. Also fixes a bug where OnStopServer/OnStopClient were not called when stopping the Editor. ([#936](#936)) ([d6389e6](d6389e6))
* Rebuild observers when we switch scenes, fixes [#978](#978) ([#1016](#1016)) ([6dd1350](6dd1350))
* reduce allocations at the transport ([80e4f17](80e4f17))
* release unitypackage ([#1355](https://github.com/MirrorNG/MirrorNG/issues/1355)) ([d0cc669](d0cc669))
* remove samples from upm package ([#25](#25)) ([a71e21f](a71e21f))
* replace player (remove authority by default) ([#1261](https://github.com/MirrorNG/MirrorNG/issues/1261)) ([ad724fe](ad724fe)), closes [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257)
* ReplacePlayer now calls OnStartLocalPlayer ([#1280](https://github.com/MirrorNG/MirrorNG/issues/1280)) ([0e1bc81](0e1bc81)), closes [#962](#962)
* replacing the player does not mean giving up authority ([#1254](https://github.com/MirrorNG/MirrorNG/issues/1254)) ([a2c273e](a2c273e))
* Respect Player Prefab Position & Rotation ([#825](#825)) ([8ebda0f](8ebda0f))
* Revert "NetworkClient.Shutdown: call ClientScene.Shutdown, otherwise it's never called" - caused client's player to not be removed from scene after disconnecting ([13bb748](13bb748))
* Revert "NetworkIdentity.observers dictionary is always created, but always empty on clients. Gets rid of all null checks." to fix server-only bug not allowing movement on client, e.g. in uMMORPG ([f56507f](f56507f))
* Revert "refactor:  consolidate prefab and spawn handlers ([#817](#817))" to fix a bug where if editor=host, build=client, we receive scene object not found when walking out of and back into an observer's range ([1f07af0](1f07af0))
* Round Robin Spawning by Hierarchy Order ([#790](#790)) ([531e202](531e202)), closes [#724](#724)
* SceneId was not set to 0 for prefab variants ([#976](#976)) ([#977](#977)) ([2ca2c48](2ca2c48))
* set authority when replacing the player ([2195fee](2195fee))
* Set syncvar variables after calling the hook ([#659](#659)) ([2d63ee1](2d63ee1))
* set version number ([#1338](https://github.com/MirrorNG/MirrorNG/issues/1338)) ([0d1d7b5](0d1d7b5))
* spawnwithauthority works again in host mode ([5b04836](5b04836))
* Stop calling ClientDisconnect on host ([#597](#597)) ([b67b3e4](b67b3e4))
* suppress warning on standalone build [#1053](#1053) ([4ef680a](4ef680a))
* Suspend server transport while changing scenes ([#1169](#1169)) ([e8fac8a](e8fac8a))
* Sync full netAnimator for new clients, fix [#980](#980) ([#1110](#1110)) ([db8310f](db8310f))
* syncvars in commands work again ([#1131](#1131)) ([c24a73f](c24a73f))
* TargetRpc now works accross assemblies ([#1130](#1130)) ([5ecd646](5ecd646)), closes [#1128](#1128)
* Telepathy already supports IPv6, but can no also connect to IPv4-only servers again (e.g. Mirror Booster) ([488446a](488446a))
* Telepathy fix a bug where calling Disconnect while connecting to a dead end would freeze Unity because .Join would wait forever. Interrupt fixes it. ([3831cbd](3831cbd))
* Telepathy forgot to set socket options for accepted clients on the server ([22931fc](22931fc))
* Telepathy updated to latest version (IPv6 fix again) ([535b4d4](535b4d4))
* Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([98d3fb0](98d3fb0))
* Telepathy updated to latest version: Correctly support IPv4 and IPv6 sockets ([2761ff2](2761ff2))
* Telepathy updated to latest version. connectionId counter is properly reset after stopping server. ([abf06df](abf06df))
* TelepathyTransport.ToString UWP exception ([8a190bf](8a190bf))
* Updated Telepathy to latest version to fix IPAddress.Parse error for "localhost" ([cc6e4f6](cc6e4f6))
* version file ([#1337](https://github.com/MirrorNG/MirrorNG/issues/1337)) ([ed7e509](ed7e509))
* webgl build fix [#1136](#1136) ([#1137](#1137)) ([c85d0df](c85d0df))
* when modifying a prefab, Unity calls OnValidate for all scene objects based on that prefab, which caused Mirror to reset the sceneId because we only checked if a prefab is currently edited, not if THIS prefab is currently edited ([db99dd7](db99dd7))
* **serialization:** Added NetworkWriter tests, found and fixed a bug in Write(Ray). ([#769](#769)) ([99c8f5c](99c8f5c))
* **tests:** Added missing SyncListByteValid test file ([#634](#634)) ([b0af876](b0af876))
* **weaver:** [#696](#696) detect .mystruct = new MyStruct() changes with syncvars ([#702](#702)) ([053949b](053949b))
* **weaver:** fix [#706](#706) find system dlls ([#729](#729)) ([53be9b6](53be9b6))
* **weaver:** fix [#796](#796), reload assemblies after initial import ([#1106](#1106)) ([d91b387](d91b387))
* **websocket:** [#829](#829) fix InvalidOperationException with wss:// ([#830](#830)) ([2d682b5](2d682b5))
* **websocket:** Remove send queues (they never worked) and SSL (temporarily) ([#879](#879)) ([3c60b08](3c60b08))
* **websocket:** Use a buffer for most WS messages in WebGL client resulting in 0 alloc for most messages ([#848](#848)) ([8967a20](8967a20))
* Telepathy updated to latest version: protect against allocation attacks via MaxMessageSize. Can be configured in the TelepathyTransport component now. ([67d715f](67d715f))
* update NetworkIdentityEditor FindProperty to renamed variables ([a2cc14b](a2cc14b))
* weaver Cmd/Rpc/Target prefix check is no longer trash ([#707](#707)) ([699a261](699a261))
* workaround for [#791](#791) ([5c850aa](5c850aa))

### Features

* [#869](#869) support structs in other assemblies ([#1022](#1022)) ([62d1887](62d1887))
* Add roomPlayer parameter to OnRoomServerCreateGamePlayer ([#1317](https://github.com/MirrorNG/MirrorNG/issues/1317)) ([abf5cdc](abf5cdc))
* Add SyncHashSet and SyncSortedSet ([#685](#685)) ([695979e](695979e))
* Add Timeout to NetworkAuthenticator ([#1091](#1091)) ([e8cc9ba](e8cc9ba))
* Add UPM configuration ([#11](#11)) ([9280af1](9280af1))
* Add version to package file ([#1361](https://github.com/MirrorNG/MirrorNG/issues/1361)) ([e97ab93](e97ab93))
* Add weaver support for Vector2Int and Vector3Int ([#646](#646)) ([e2a6ce9](e2a6ce9))
* allow users to detect mirror version 3 ([ee9c737](ee9c737))
* An authenticator that times out other authenticators ([#1211](https://github.com/MirrorNG/MirrorNG/issues/1211)) ([09f6892](09f6892))
* Authentication Framework ([#1057](#1057)) ([56bcb02](56bcb02))
* Chat example ([#1305](https://github.com/MirrorNG/MirrorNG/issues/1305)) ([9926472](9926472))
* component based SyncToOwner, fixes [#39](#39) ([#1023](#1023)) ([c6d86b3](c6d86b3))
* custom reader/writer via extension methods ([#1047](#1047)) ([b45afad](b45afad))
* Custom readers and writers ([92b3e98](92b3e98))
* fallback transport now supports uri ([#1296](https://github.com/MirrorNG/MirrorNG/issues/1296)) ([e4a701e](e4a701e))
* generate serializers for IMessageBase structs ([#1353](https://github.com/MirrorNG/MirrorNG/issues/1353)) ([3c0bc28](3c0bc28))
* Implement IReadOnlyList<T> in SyncLists ([#903](#903)) ([3eaaa77](3eaaa77))
* Include version in release ([#1336](https://github.com/MirrorNG/MirrorNG/issues/1336)) ([e4f89cf](e4f89cf))
* LLAPI transport can receive port from uri ([#1294](https://github.com/MirrorNG/MirrorNG/issues/1294)) ([7865a84](7865a84))
* Mirror now supports message inheritance ([#1286](https://github.com/MirrorNG/MirrorNG/issues/1286)) ([f9d34d5](f9d34d5))
* Multiplex based on url ([#1295](https://github.com/MirrorNG/MirrorNG/issues/1295)) ([c206f9a](c206f9a))
* network writer pool to avoid expensive allocations ([3659acb](3659acb))
* network writer pool to avoid expensive allocations ([#928](#928)) ([f5e9318](f5e9318))
* NetworkConnection is optional for handlers ([#1202](https://github.com/MirrorNG/MirrorNG/issues/1202)) ([bf9eb61](bf9eb61))
* new way to connect using uri ([#1279](https://github.com/MirrorNG/MirrorNG/issues/1279)) ([7c3622c](7c3622c))
* Pass all information to spawn handler ([#1215](https://github.com/MirrorNG/MirrorNG/issues/1215)) ([d741bae](d741bae))
* profiler info is available in production builds ([5649cc6](5649cc6))
* Remove Command shortcut for host mode ([#1168](#1168)) ([94eda38](94eda38))
* safer and consistent writers names ([#979](#979)) ([b4077c1](b4077c1))
* Script Templates ([#1217](https://github.com/MirrorNG/MirrorNG/issues/1217)) ([8cf6a07](8cf6a07))
* Secure messages that require authentication, fixes [#720](#720) ([#1089](#1089)) ([7ac43cd](7ac43cd))
* Semantic release for UPM ([#24](#24)) ([8cbc005](8cbc005))
* ship as a unitypackage ([11edc14](11edc14))
* Show compile time error if overriding unused OnServerAddPlayer ([#682](#682)) ([a8599c1](a8599c1))
* support sending and receiving ArraySegment<byte> ([#898](#898)) ([e5eecbf](e5eecbf))
* support writing and reading array segments ([#918](#918)) ([f9ff443](f9ff443))
* SyncDictionary can now be used for any IDictionary ([#703](#703)) ([2683572](2683572))
* SyncList now supports any IList implementation ([#704](#704)) ([040bcb4](040bcb4))
* SyncList.FindIndex added ([#823](#823)) ([b5ff43a](b5ff43a))
* SyncSet custom Equality Comparer support ([#1147](#1147)) ([0f95185](0f95185))
* SyncToOwner now works with authority ([#1204](https://github.com/MirrorNG/MirrorNG/issues/1204)) ([92d0df7](92d0df7))
* telepathy can now receive port from uri ([#1284](https://github.com/MirrorNG/MirrorNG/issues/1284)) ([06946cf](06946cf))
* Transport can send to multiple connections at once ([#1120](#1120)) ([bc7e116](bc7e116))
* update upm package if tests pass ([#21](#21)) ([7447776](7447776))
* user friendly weaver error ([#896](#896)) ([954a3d5](954a3d5))
* Users may provide custom serializers for any type ([#1153](#1153)) ([9cb309e](9cb309e))
* websocket can receive port in url ([#1287](https://github.com/MirrorNG/MirrorNG/issues/1287)) ([c8ad118](c8ad118))
* Websockets now give client address, fix [#1121](#1121) ([#1125](#1125)) ([c9f317d](c9f317d))
* **scene:** Add support for scene loading params ([#644](#644)) ([d48a375](d48a375))
* **syncvar:** Add SyncDictionary ([#602](#602)) ([7d21bde](7d21bde))
* **telepathy:** Split MaxMessageSize to allow setting a different value for client and server ([#749](#749)) ([f0a8b5d](f0a8b5d))
* **websocket:** Re-enable native SSL ([#965](#965)) ([7ed4a9a](7ed4a9a))

### Performance Improvements

* AddPlayerMessage is now a value type ([246a551](246a551))
* allocation free enumerator for syncsets,  fixes [#1171](#1171) ([#1173](#1173)) ([035e630](035e630))
* allocation free syncdict foreach, fix [#1172](#1172) ([#1174](#1174)) ([1ec8910](1ec8910))
* avoid allocation for error messages ([c669ff1](c669ff1))
* Avoid allocation when reading message payload ([#912](#912)) ([11750a9](11750a9))
* avoid allocation with message structs ([#939](#939)) ([7c7c910](7c7c910))
* avoid boxing for getting message id ([#1144](#1144)) ([9513842](9513842))
* avoid boxing if there is no profiler ([a351879](a351879))
* ClientAuthorityMessage is now a value type ([#991](#991)) ([d071438](d071438))
* Custom IEnumerator for SyncLists to avoid allocations on foreach ([#904](#904)) ([4ffd5a2](4ffd5a2))
* don't varint bytes and shorts ([4867415](4867415))
* eliminate boxing with lists ([#901](#901)) ([8f6d4cb](8f6d4cb))
* eliminate small allocation on remote calls ([#907](#907)) ([1c18743](1c18743))
* eliminate string concat during remote method calls ([#908](#908)) ([70a532b](70a532b))
* empty messages are value types now ([145edaa](145edaa))
* messages should be value types ([#987](#987)) ([633fb19](633fb19))
* MultiplexTransport: avoid Linq allocations that would happen on every packet send because Send calls .ServerActive() each time ([7fe8888](7fe8888))
* Networkreader nonalloc ([#910](#910)) ([18f035d](18f035d))
* objdestroy message is now a value type ([#993](#993)) ([a32c5a9](a32c5a9))
* ObjHideMessage is now a value type ([#992](#992)) ([a49d938](a49d938))
* OnDeserializeSafely without GC ([#804](#804)) ([27b7e25](27b7e25))
* Optimize interest management ([f1ceb0c](f1ceb0c))
* Optimize interest management ([#899](#899)) ([ff1a234](ff1a234))
* Pack small 32 bit negatives efficiently ([480af1a](480af1a))
* Pack small 64 bit negatives efficiently ([5f1ef4a](5f1ef4a))
* Recycle argument writer to avoid allocations ([#945](#945)) ([9743216](9743216))
* Reduce enum bandwidth ([#794](#794)) ([97e9ac2](97e9ac2))
* remove allocations during syncvar sync ([#946](#946)) ([d2381ce](d2381ce))
* remove BinaryWriter,  it allocates like crazy ([#929](#929)) ([7b3e82a](7b3e82a))
* remove network transform allocation ([9e3ecc1](9e3ecc1))
* remove syncvar boxing ([#927](#927)) ([b2ba589](b2ba589))
* return the contents of the writer as an array segment ([#916](#916)) ([ced3690](ced3690))
* reuse the network writer used for rpc parameters ([5dafc4d](5dafc4d))
* rpc messages are now value types ([#997](#997)) ([b5b2f3e](b5b2f3e))
* SceneMessage is now a value type ([#989](#989)) ([407b36a](407b36a))
* spawn with client authority only takes 1 message ([#1206](https://github.com/MirrorNG/MirrorNG/issues/1206)) ([3b9414f](3b9414f))
* SpawnPrefabMessage is now a value type ([a44efd1](a44efd1))
* SpawnSceneObjectMessage is now a value type ([40c7d97](40c7d97))
* Transports now give ArraySegment<byte> instead of byte[] (based on [#569](#569) and [#846](#846)) ([77bee45](77bee45))
* update vars is now a value type ([#990](#990)) ([f99e71e](f99e71e))
* Use 0 for null byte arrays ([#925](#925)) ([21ca49d](21ca49d))
* use 0 for null strings ([#926](#926)) ([7181cd9](7181cd9))
* use bitshift operations instead of division in varint ([fff765c](fff765c))
* Use RemoveAt to remove elements from lists ([22b45f7](22b45f7))
* use value types for empty messages ([#988](#988)) ([81d915e](81d915e))
* Use WritePackedUInt32 in SyncList ([#688](#688)) ([2db7576](2db7576))

* Merge pull request #650 from vis2k/networkclient_static_2 ([fac0542](fac0542)), closes [#650](#650)

### BREAKING CHANGES

* Remove obsolete OnServerAddPlayer

Any person that overrides this method has a broken game.  These methods are never called anywhere.

The user gets a warning because they are overriding an obsolete method,  which might get ignored if they have lots of other warnings.   They would run their game and their game would not work at all.  No errors.

By removing these methods, users that override these methods will get a compile time error instead.  So they cannot ignore this error and they will fix it.

* Method is no longer available in NetworkLobbyManager
* Make NetworkClient Great Again!
github-actions bot referenced this pull request in MirageNet/Mirage Jan 4, 2020
# 1.0.0 (2020-01-04)

### Bug Fixes

* (again) Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([46eddc0](46eddc0))
* [#1359](https://github.com/MirrorNG/MirrorNG/issues/1359). Revert "Destroy objects owned by this connection when disconnecting ([#1179](#1179))" ([4cc4279](4cc4279))
* [#573](#573) (part 1) NetworkScenePostProcess handles NetworkIdentities of all scenes except DontDestroyOnLoad. this way it works for additively loaded scenes too. ([c1af84e](c1af84e))
* [#573](#573) (part 2) NetworkManager detects additive scene loads and respawns objects on server/client again ([e521a20](e521a20))
* [#573](#573) NullReferenceException because destroyed NetworkIdentities were never removed from sceneIds dict ([a2d6317](a2d6317))
* [#609](#609) by spawning observers in NetworkServer.AddPlayerForConnection after setting the controller. There is no point in trying to spawn with a null controller in SetReady, because by definition no one can observer something that is null. ([#623](#623)) ([5c00577](5c00577))
* [#640](#640) InternalReplacePlayerForConnection calls SpawnObserversForConnection now too ([bdf12c8](bdf12c8))
* [#651](#651) GetSceneAt assumes default scene ([#654](#654)) ([65eaba1](65eaba1))
* [#652](#652) OnPostProcessScene includes disabled NetworkIdentities in scene ([ee2ace8](ee2ace8))
* [#679](#679) package for unity ([4a6a4df](4a6a4df))
* [#679](#679) unity package ([9895647](9895647))
* [#692](#692) by always adding connectionToClient when rebuilding observers ([ab44ac8](ab44ac8))
* [#718](#718) remove Tests folder from unitypackage ([#827](#827)) ([7e487af](7e487af))
* [#791](#791) corrected assembly paths passed to weaver ([#803](#803)) ([3ba546e](3ba546e))
* [#791](#791) stack overflow in the weaver ([#792](#792)) ([7b57830](7b57830))
* [#840](#840) by allowing Mirror to respect the forceHidden flag ([#893](#893)) ([3ec3d02](3ec3d02))
* added new read/write symbol params ([#806](#806)) ([3a50ca6](3a50ca6))
* Added WriteBytesAndSize tests, and fixed the function to be pedantic. ([#773](#773)) ([72e4e55](72e4e55))
* Additive scene can respawn objects safely ([#1270](https://github.com/MirrorNG/MirrorNG/issues/1270)) ([8899d20](8899d20))
* ArraySegment<byte> work in Messages ([#919](#919)) ([981ba7c](981ba7c))
* Call hooks when initializing objects OnStartServer on host ([#1249](https://github.com/MirrorNG/MirrorNG/issues/1249)) ([7aa7815](7aa7815))
* call Obsoleted OnStartClient ([#681](#681)) ([8dea50e](8dea50e))
* call OnStartClient only once in room ([#1264](https://github.com/MirrorNG/MirrorNG/issues/1264)) ([4d373c5](4d373c5))
* check event prefix ([7417b68](7417b68))
* ClientRpc methods now work accross assemblies ([#1129](#1129)) ([13dbcb9](13dbcb9)), closes [#1128](#1128)
* Cmds can be called from child classes in other assemblies ([d8a98d8](d8a98d8)), closes [#1108](#1108)
* code generation works with il2cpp again ([#1056](#1056)) ([8738562](8738562))
* destroy owned objects ([#1352](https://github.com/MirrorNG/MirrorNG/issues/1352)) ([d7a58d2](d7a58d2)), closes [#1346](https://github.com/MirrorNG/MirrorNG/issues/1346) [#1206](https://github.com/MirrorNG/MirrorNG/issues/1206) [#1351](https://github.com/MirrorNG/MirrorNG/issues/1351)
* do not accumulate changes if there are no observers fixes [#963](#963) ([#964](#964)) ([64a0468](64a0468))
* Do not call InternalAddPlayer twice ([#1246](https://github.com/MirrorNG/MirrorNG/issues/1246)) ([7119dd1](7119dd1))
* don't call hook in host if no change,  fixes [#1142](#1142) ([#1143](#1143)) ([d8ce80f](d8ce80f))
* don't convert null arrays to empty array ([#913](#913)) ([dd758ca](dd758ca))
* Don't disconnect host ([#608](#608)) ([c1707e5](c1707e5))
* Don't give host player authority by default ([#1158](#1158)) ([1fc1ed2](1fc1ed2))
* Don't increment counter in Awake ([#971](#971)) ([45b7118](45b7118))
* Don't set asset id for scene objects ([7e40232](7e40232))
* Don't set framerate in host mode ([4644bc4](4644bc4))
* Don't throw exception getting address ([7df3ce3](7df3ce3))
* don't use obsolete method ([12437ba](12437ba))
* Draw SyncVar label for Unity objects inline  ([#1291](https://github.com/MirrorNG/MirrorNG/issues/1291)) ([a0425e4](a0425e4))
* Dummy file for SyncListStructProcessor.cs ([#798](#798)) ([75e4f15](75e4f15))
* error when there are no network behaviors ([#1303](https://github.com/MirrorNG/MirrorNG/issues/1303)) ([dbe0643](dbe0643))
* error with missing assemblies ([#1052](#1052)) ([00eb23a](00eb23a)), closes [#1051](#1051)
* Fix error scene error message in host mode ([838d4f0](838d4f0))
* hasAuthority is now visible in all overrides ([#1251](https://github.com/MirrorNG/MirrorNG/issues/1251)) ([2f19c7c](2f19c7c)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* hooks in host mode can call each other ([#1017](#1017)) ([f27fd0b](f27fd0b))
* invalid scene id in 2019.1 by ignoring prefabs in NetworkScenePostProcess ([203a823](203a823))
* isClient now reports true onStartServer in host mode ([#1252](https://github.com/MirrorNG/MirrorNG/issues/1252)) ([d00c95b](d00c95b))
* isLocalPlayer is true during OnStartClient for Player ([#1255](https://github.com/MirrorNG/MirrorNG/issues/1255)) ([fb26d00](fb26d00)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* isLocalPlayer works in host mode onStartServer ([#1253](https://github.com/MirrorNG/MirrorNG/issues/1253)) ([9acde20](9acde20)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* it is not safe to modify this outside this class ([bc7a961](bc7a961))
* list server logs properly when disconnected ([f02d317](f02d317))
* ListServer Ping not found in WebGL ([6c4b34b](6c4b34b))
* Lobby Remove button not showing for P1 when Server Only ([377c47c](377c47c))
* maintain Unity's copyright notice ([#961](#961)) ([7718955](7718955))
* Make assembly definition 2018.4 compatible ([99ecc9e](99ecc9e))
* make build pass ([08df6d0](08df6d0))
* Mark weaver as failed if serializing invalid type ([03c767d](03c767d))
* missed ushort reader/writer ([74faf2a](74faf2a))
* Mono.CecilX namespace to work around Unity 2019 Cecil namespace collision ([#832](#832)) ([5262592](5262592))
* move listserver classes into package ([2668b17](2668b17))
* move NetworkStreamExtension in a namespace ([12de543](12de543))
* MultiplexTransport GetMaxMessageSize NullReferenceException when called on server. And fixes potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes. ([#1332](https://github.com/MirrorNG/MirrorNG/issues/1332)) ([b3127be](b3127be))
* NetworkBehaviourInspector wouldn't show SyncMode if syncvars / syncobjects were only private ([ed572da](ed572da))
* NetworkClient.Shutdown calls ClientScene.Shutdown again to properly clean up client scene. ClientScene only cleans up itself without touching transport or NetworkIdentities (fixes the bug where the player object wouldn't be destroyed after calling StopClient) ([fb716df](fb716df))
* NetworkManager OnValidate wouldn't properly save the automatically added Transport before because Undo.RecordObject is needed for that now. ([524abfc](524abfc))
* NetworkTransform clientAuthority works again via clientAuthority option that is configurable in inspector. this had to be fixed after we removed local authority. ([d712cd0](d712cd0))
* non ready connections should not observe objects ([1352334](1352334))
* null reference exception ([7ce95c5](7ce95c5))
* OnClientReady is called and passed the appropriate ready state value in NetworkLobbyPlayer ([#618](#618)) ([c9eac57](c9eac57))
* OnSetHostVisibility can now check if it has authority ([888e46c](888e46c))
* pack works if message is boxed ([55c9bb6](55c9bb6))
* Pass the name of the invoking class and desired command when an object has no authority. ([#1216](https://github.com/MirrorNG/MirrorNG/issues/1216)) ([701f4f4](701f4f4))
* Potential DOS attack by sending invalid UTF8 byte sequences  ([#727](#727)) ([3cee3ab](3cee3ab))
* Potential DOS attack on server by sending packed ulongs when packed uints are expected. ([#730](#730)) ([015d0d5](015d0d5))
* potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes when using FallbackTransport. ([#1331](https://github.com/MirrorNG/MirrorNG/issues/1331)) ([5449840](5449840))
* potential null reference exception with debug logging ([33493a0](33493a0))
* Prevent Compiler Paradox ([#1145](#1145)) ([fd43c67](fd43c67))
* properly stop client and server in OnApplicationQuit so that clients still get a chance to send then 'quit' packet instead of just timing out. Also fixes a bug where OnStopServer/OnStopClient were not called when stopping the Editor. ([#936](#936)) ([d6389e6](d6389e6))
* Rebuild observers when we switch scenes, fixes [#978](#978) ([#1016](#1016)) ([6dd1350](6dd1350))
* reduce allocations at the transport ([80e4f17](80e4f17))
* release unitypackage ([#1355](https://github.com/MirrorNG/MirrorNG/issues/1355)) ([d0cc669](d0cc669))
* remove samples from upm package ([#25](#25)) ([a71e21f](a71e21f))
* replace player (remove authority by default) ([#1261](https://github.com/MirrorNG/MirrorNG/issues/1261)) ([ad724fe](ad724fe)), closes [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257)
* ReplacePlayer now calls OnStartLocalPlayer ([#1280](https://github.com/MirrorNG/MirrorNG/issues/1280)) ([0e1bc81](0e1bc81)), closes [#962](#962)
* replacing the player does not mean giving up authority ([#1254](https://github.com/MirrorNG/MirrorNG/issues/1254)) ([a2c273e](a2c273e))
* Respect Player Prefab Position & Rotation ([#825](#825)) ([8ebda0f](8ebda0f))
* Revert "NetworkClient.Shutdown: call ClientScene.Shutdown, otherwise it's never called" - caused client's player to not be removed from scene after disconnecting ([13bb748](13bb748))
* Revert "NetworkIdentity.observers dictionary is always created, but always empty on clients. Gets rid of all null checks." to fix server-only bug not allowing movement on client, e.g. in uMMORPG ([f56507f](f56507f))
* Revert "refactor:  consolidate prefab and spawn handlers ([#817](#817))" to fix a bug where if editor=host, build=client, we receive scene object not found when walking out of and back into an observer's range ([1f07af0](1f07af0))
* Round Robin Spawning by Hierarchy Order ([#790](#790)) ([531e202](531e202)), closes [#724](#724)
* SceneId was not set to 0 for prefab variants ([#976](#976)) ([#977](#977)) ([2ca2c48](2ca2c48))
* set authority when replacing the player ([2195fee](2195fee))
* Set syncvar variables after calling the hook ([#659](#659)) ([2d63ee1](2d63ee1))
* set version number ([#1338](https://github.com/MirrorNG/MirrorNG/issues/1338)) ([0d1d7b5](0d1d7b5))
* spawnwithauthority works again in host mode ([5b04836](5b04836))
* Stop calling ClientDisconnect on host ([#597](#597)) ([b67b3e4](b67b3e4))
* suppress warning on standalone build [#1053](#1053) ([4ef680a](4ef680a))
* Suspend server transport while changing scenes ([#1169](#1169)) ([e8fac8a](e8fac8a))
* Sync full netAnimator for new clients, fix [#980](#980) ([#1110](#1110)) ([db8310f](db8310f))
* syncvars in commands work again ([#1131](#1131)) ([c24a73f](c24a73f))
* TargetRpc now works accross assemblies ([#1130](#1130)) ([5ecd646](5ecd646)), closes [#1128](#1128)
* Telepathy already supports IPv6, but can no also connect to IPv4-only servers again (e.g. Mirror Booster) ([488446a](488446a))
* Telepathy fix a bug where calling Disconnect while connecting to a dead end would freeze Unity because .Join would wait forever. Interrupt fixes it. ([3831cbd](3831cbd))
* Telepathy forgot to set socket options for accepted clients on the server ([22931fc](22931fc))
* Telepathy updated to latest version (IPv6 fix again) ([535b4d4](535b4d4))
* Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([98d3fb0](98d3fb0))
* Telepathy updated to latest version: Correctly support IPv4 and IPv6 sockets ([2761ff2](2761ff2))
* Telepathy updated to latest version. connectionId counter is properly reset after stopping server. ([abf06df](abf06df))
* TelepathyTransport.ToString UWP exception ([8a190bf](8a190bf))
* Updated Telepathy to latest version to fix IPAddress.Parse error for "localhost" ([cc6e4f6](cc6e4f6))
* version file ([#1337](https://github.com/MirrorNG/MirrorNG/issues/1337)) ([ed7e509](ed7e509))
* webgl build fix [#1136](#1136) ([#1137](#1137)) ([c85d0df](c85d0df))
* when modifying a prefab, Unity calls OnValidate for all scene objects based on that prefab, which caused Mirror to reset the sceneId because we only checked if a prefab is currently edited, not if THIS prefab is currently edited ([db99dd7](db99dd7))
* **serialization:** Added NetworkWriter tests, found and fixed a bug in Write(Ray). ([#769](#769)) ([99c8f5c](99c8f5c))
* **tests:** Added missing SyncListByteValid test file ([#634](#634)) ([b0af876](b0af876))
* **weaver:** [#696](#696) detect .mystruct = new MyStruct() changes with syncvars ([#702](#702)) ([053949b](053949b))
* **weaver:** fix [#706](#706) find system dlls ([#729](#729)) ([53be9b6](53be9b6))
* **weaver:** fix [#796](#796), reload assemblies after initial import ([#1106](#1106)) ([d91b387](d91b387))
* **websocket:** [#829](#829) fix InvalidOperationException with wss:// ([#830](#830)) ([2d682b5](2d682b5))
* **websocket:** Remove send queues (they never worked) and SSL (temporarily) ([#879](#879)) ([3c60b08](3c60b08))
* **websocket:** Use a buffer for most WS messages in WebGL client resulting in 0 alloc for most messages ([#848](#848)) ([8967a20](8967a20))
* Telepathy updated to latest version: protect against allocation attacks via MaxMessageSize. Can be configured in the TelepathyTransport component now. ([67d715f](67d715f))
* update NetworkIdentityEditor FindProperty to renamed variables ([a2cc14b](a2cc14b))
* weaver Cmd/Rpc/Target prefix check is no longer trash ([#707](#707)) ([699a261](699a261))
* workaround for [#791](#791) ([5c850aa](5c850aa))

### Features

* [#869](#869) support structs in other assemblies ([#1022](#1022)) ([62d1887](62d1887))
* Add roomPlayer parameter to OnRoomServerCreateGamePlayer ([#1317](https://github.com/MirrorNG/MirrorNG/issues/1317)) ([abf5cdc](abf5cdc))
* Add SyncHashSet and SyncSortedSet ([#685](#685)) ([695979e](695979e))
* Add Timeout to NetworkAuthenticator ([#1091](#1091)) ([e8cc9ba](e8cc9ba))
* Add UPM configuration ([#11](#11)) ([9280af1](9280af1))
* Add version to package file ([#1361](https://github.com/MirrorNG/MirrorNG/issues/1361)) ([e97ab93](e97ab93))
* Add weaver support for Vector2Int and Vector3Int ([#646](#646)) ([e2a6ce9](e2a6ce9))
* allow users to detect mirror version 3 ([ee9c737](ee9c737))
* An authenticator that times out other authenticators ([#1211](https://github.com/MirrorNG/MirrorNG/issues/1211)) ([09f6892](09f6892))
* Authentication Framework ([#1057](#1057)) ([56bcb02](56bcb02))
* Chat example ([#1305](https://github.com/MirrorNG/MirrorNG/issues/1305)) ([9926472](9926472))
* component based SyncToOwner, fixes [#39](#39) ([#1023](#1023)) ([c6d86b3](c6d86b3))
* custom reader/writer via extension methods ([#1047](#1047)) ([b45afad](b45afad))
* Custom readers and writers ([92b3e98](92b3e98))
* fallback transport now supports uri ([#1296](https://github.com/MirrorNG/MirrorNG/issues/1296)) ([e4a701e](e4a701e))
* generate serializers for IMessageBase structs ([#1353](https://github.com/MirrorNG/MirrorNG/issues/1353)) ([3c0bc28](3c0bc28))
* Implement IReadOnlyList<T> in SyncLists ([#903](#903)) ([3eaaa77](3eaaa77))
* Include version in release ([#1336](https://github.com/MirrorNG/MirrorNG/issues/1336)) ([e4f89cf](e4f89cf))
* LLAPI transport can receive port from uri ([#1294](https://github.com/MirrorNG/MirrorNG/issues/1294)) ([7865a84](7865a84))
* Mirror now supports message inheritance ([#1286](https://github.com/MirrorNG/MirrorNG/issues/1286)) ([f9d34d5](f9d34d5))
* Multiplex based on url ([#1295](https://github.com/MirrorNG/MirrorNG/issues/1295)) ([c206f9a](c206f9a))
* network writer pool to avoid expensive allocations ([3659acb](3659acb))
* network writer pool to avoid expensive allocations ([#928](#928)) ([f5e9318](f5e9318))
* NetworkConnection is optional for handlers ([#1202](https://github.com/MirrorNG/MirrorNG/issues/1202)) ([bf9eb61](bf9eb61))
* new way to connect using uri ([#1279](https://github.com/MirrorNG/MirrorNG/issues/1279)) ([7c3622c](7c3622c))
* Pass all information to spawn handler ([#1215](https://github.com/MirrorNG/MirrorNG/issues/1215)) ([d741bae](d741bae))
* profiler info is available in production builds ([5649cc6](5649cc6))
* Remove Command shortcut for host mode ([#1168](#1168)) ([94eda38](94eda38))
* safer and consistent writers names ([#979](#979)) ([b4077c1](b4077c1))
* Script Templates ([#1217](https://github.com/MirrorNG/MirrorNG/issues/1217)) ([8cf6a07](8cf6a07))
* Secure messages that require authentication, fixes [#720](#720) ([#1089](#1089)) ([7ac43cd](7ac43cd))
* Semantic release for UPM ([#24](#24)) ([8cbc005](8cbc005))
* ship as a unitypackage ([11edc14](11edc14))
* Show compile time error if overriding unused OnServerAddPlayer ([#682](#682)) ([a8599c1](a8599c1))
* support sending and receiving ArraySegment<byte> ([#898](#898)) ([e5eecbf](e5eecbf))
* support writing and reading array segments ([#918](#918)) ([f9ff443](f9ff443))
* SyncDictionary can now be used for any IDictionary ([#703](#703)) ([2683572](2683572))
* SyncList now supports any IList implementation ([#704](#704)) ([040bcb4](040bcb4))
* SyncList.FindIndex added ([#823](#823)) ([b5ff43a](b5ff43a))
* SyncSet custom Equality Comparer support ([#1147](#1147)) ([0f95185](0f95185))
* SyncToOwner now works with authority ([#1204](https://github.com/MirrorNG/MirrorNG/issues/1204)) ([92d0df7](92d0df7))
* telepathy can now receive port from uri ([#1284](https://github.com/MirrorNG/MirrorNG/issues/1284)) ([06946cf](06946cf))
* Transport can send to multiple connections at once ([#1120](#1120)) ([bc7e116](bc7e116))
* update upm package if tests pass ([#21](#21)) ([7447776](7447776))
* user friendly weaver error ([#896](#896)) ([954a3d5](954a3d5))
* Users may provide custom serializers for any type ([#1153](#1153)) ([9cb309e](9cb309e))
* websocket can receive port in url ([#1287](https://github.com/MirrorNG/MirrorNG/issues/1287)) ([c8ad118](c8ad118))
* Websockets now give client address, fix [#1121](#1121) ([#1125](#1125)) ([c9f317d](c9f317d))
* **scene:** Add support for scene loading params ([#644](#644)) ([d48a375](d48a375))
* **syncvar:** Add SyncDictionary ([#602](#602)) ([7d21bde](7d21bde))
* **telepathy:** Split MaxMessageSize to allow setting a different value for client and server ([#749](#749)) ([f0a8b5d](f0a8b5d))
* **websocket:** Re-enable native SSL ([#965](#965)) ([7ed4a9a](7ed4a9a))

### Performance Improvements

* AddPlayerMessage is now a value type ([246a551](246a551))
* allocation free enumerator for syncsets,  fixes [#1171](#1171) ([#1173](#1173)) ([035e630](035e630))
* allocation free syncdict foreach, fix [#1172](#1172) ([#1174](#1174)) ([1ec8910](1ec8910))
* avoid allocation for error messages ([c669ff1](c669ff1))
* Avoid allocation when reading message payload ([#912](#912)) ([11750a9](11750a9))
* avoid allocation with message structs ([#939](#939)) ([7c7c910](7c7c910))
* avoid boxing for getting message id ([#1144](#1144)) ([9513842](9513842))
* avoid boxing if there is no profiler ([a351879](a351879))
* ClientAuthorityMessage is now a value type ([#991](#991)) ([d071438](d071438))
* Custom IEnumerator for SyncLists to avoid allocations on foreach ([#904](#904)) ([4ffd5a2](4ffd5a2))
* don't varint bytes and shorts ([4867415](4867415))
* eliminate boxing with lists ([#901](#901)) ([8f6d4cb](8f6d4cb))
* eliminate small allocation on remote calls ([#907](#907)) ([1c18743](1c18743))
* eliminate string concat during remote method calls ([#908](#908)) ([70a532b](70a532b))
* empty messages are value types now ([145edaa](145edaa))
* messages should be value types ([#987](#987)) ([633fb19](633fb19))
* MultiplexTransport: avoid Linq allocations that would happen on every packet send because Send calls .ServerActive() each time ([7fe8888](7fe8888))
* Networkreader nonalloc ([#910](#910)) ([18f035d](18f035d))
* objdestroy message is now a value type ([#993](#993)) ([a32c5a9](a32c5a9))
* ObjHideMessage is now a value type ([#992](#992)) ([a49d938](a49d938))
* OnDeserializeSafely without GC ([#804](#804)) ([27b7e25](27b7e25))
* Optimize interest management ([f1ceb0c](f1ceb0c))
* Optimize interest management ([#899](#899)) ([ff1a234](ff1a234))
* Pack small 32 bit negatives efficiently ([480af1a](480af1a))
* Pack small 64 bit negatives efficiently ([5f1ef4a](5f1ef4a))
* Recycle argument writer to avoid allocations ([#945](#945)) ([9743216](9743216))
* Reduce enum bandwidth ([#794](#794)) ([97e9ac2](97e9ac2))
* remove allocations during syncvar sync ([#946](#946)) ([d2381ce](d2381ce))
* remove BinaryWriter,  it allocates like crazy ([#929](#929)) ([7b3e82a](7b3e82a))
* remove network transform allocation ([9e3ecc1](9e3ecc1))
* remove syncvar boxing ([#927](#927)) ([b2ba589](b2ba589))
* return the contents of the writer as an array segment ([#916](#916)) ([ced3690](ced3690))
* reuse the network writer used for rpc parameters ([5dafc4d](5dafc4d))
* rpc messages are now value types ([#997](#997)) ([b5b2f3e](b5b2f3e))
* SceneMessage is now a value type ([#989](#989)) ([407b36a](407b36a))
* spawn with client authority only takes 1 message ([#1206](https://github.com/MirrorNG/MirrorNG/issues/1206)) ([3b9414f](3b9414f))
* SpawnPrefabMessage is now a value type ([a44efd1](a44efd1))
* SpawnSceneObjectMessage is now a value type ([40c7d97](40c7d97))
* Transports now give ArraySegment<byte> instead of byte[] (based on [#569](#569) and [#846](#846)) ([77bee45](77bee45))
* update vars is now a value type ([#990](#990)) ([f99e71e](f99e71e))
* Use 0 for null byte arrays ([#925](#925)) ([21ca49d](21ca49d))
* use 0 for null strings ([#926](#926)) ([7181cd9](7181cd9))
* use bitshift operations instead of division in varint ([fff765c](fff765c))
* Use RemoveAt to remove elements from lists ([22b45f7](22b45f7))
* use value types for empty messages ([#988](#988)) ([81d915e](81d915e))
* Use WritePackedUInt32 in SyncList ([#688](#688)) ([2db7576](2db7576))

* Merge pull request #650 from vis2k/networkclient_static_2 ([fac0542](fac0542)), closes [#650](#650)

### BREAKING CHANGES

* Remove obsolete OnServerAddPlayer

Any person that overrides this method has a broken game.  These methods are never called anywhere.

The user gets a warning because they are overriding an obsolete method,  which might get ignored if they have lots of other warnings.   They would run their game and their game would not work at all.  No errors.

By removing these methods, users that override these methods will get a compile time error instead.  So they cannot ignore this error and they will fix it.

* Method is no longer available in NetworkLobbyManager
* Make NetworkClient Great Again!
github-actions bot referenced this pull request in MirageNet/Mirage Jan 4, 2020
# 1.0.0 (2020-01-04)

### Bug Fixes

* (again) Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([46eddc0](46eddc0))
* [#1359](https://github.com/MirrorNG/MirrorNG/issues/1359). Revert "Destroy objects owned by this connection when disconnecting ([#1179](#1179))" ([4cc4279](4cc4279))
* [#573](#573) (part 1) NetworkScenePostProcess handles NetworkIdentities of all scenes except DontDestroyOnLoad. this way it works for additively loaded scenes too. ([c1af84e](c1af84e))
* [#573](#573) (part 2) NetworkManager detects additive scene loads and respawns objects on server/client again ([e521a20](e521a20))
* [#573](#573) NullReferenceException because destroyed NetworkIdentities were never removed from sceneIds dict ([a2d6317](a2d6317))
* [#609](#609) by spawning observers in NetworkServer.AddPlayerForConnection after setting the controller. There is no point in trying to spawn with a null controller in SetReady, because by definition no one can observer something that is null. ([#623](#623)) ([5c00577](5c00577))
* [#640](#640) InternalReplacePlayerForConnection calls SpawnObserversForConnection now too ([bdf12c8](bdf12c8))
* [#651](#651) GetSceneAt assumes default scene ([#654](#654)) ([65eaba1](65eaba1))
* [#652](#652) OnPostProcessScene includes disabled NetworkIdentities in scene ([ee2ace8](ee2ace8))
* [#679](#679) package for unity ([4a6a4df](4a6a4df))
* [#679](#679) unity package ([9895647](9895647))
* [#692](#692) by always adding connectionToClient when rebuilding observers ([ab44ac8](ab44ac8))
* [#718](#718) remove Tests folder from unitypackage ([#827](#827)) ([7e487af](7e487af))
* [#791](#791) corrected assembly paths passed to weaver ([#803](#803)) ([3ba546e](3ba546e))
* [#791](#791) stack overflow in the weaver ([#792](#792)) ([7b57830](7b57830))
* [#840](#840) by allowing Mirror to respect the forceHidden flag ([#893](#893)) ([3ec3d02](3ec3d02))
* added new read/write symbol params ([#806](#806)) ([3a50ca6](3a50ca6))
* Added WriteBytesAndSize tests, and fixed the function to be pedantic. ([#773](#773)) ([72e4e55](72e4e55))
* Additive scene can respawn objects safely ([#1270](https://github.com/MirrorNG/MirrorNG/issues/1270)) ([8899d20](8899d20))
* ArraySegment<byte> work in Messages ([#919](#919)) ([981ba7c](981ba7c))
* Call hooks when initializing objects OnStartServer on host ([#1249](https://github.com/MirrorNG/MirrorNG/issues/1249)) ([7aa7815](7aa7815))
* call Obsoleted OnStartClient ([#681](#681)) ([8dea50e](8dea50e))
* call OnStartClient only once in room ([#1264](https://github.com/MirrorNG/MirrorNG/issues/1264)) ([4d373c5](4d373c5))
* check event prefix ([7417b68](7417b68))
* ClientRpc methods now work accross assemblies ([#1129](#1129)) ([13dbcb9](13dbcb9)), closes [#1128](#1128)
* Cmds can be called from child classes in other assemblies ([d8a98d8](d8a98d8)), closes [#1108](#1108)
* code generation works with il2cpp again ([#1056](#1056)) ([8738562](8738562))
* destroy owned objects ([#1352](https://github.com/MirrorNG/MirrorNG/issues/1352)) ([d7a58d2](d7a58d2)), closes [#1346](https://github.com/MirrorNG/MirrorNG/issues/1346) [#1206](https://github.com/MirrorNG/MirrorNG/issues/1206) [#1351](https://github.com/MirrorNG/MirrorNG/issues/1351)
* do not accumulate changes if there are no observers fixes [#963](#963) ([#964](#964)) ([64a0468](64a0468))
* Do not call InternalAddPlayer twice ([#1246](https://github.com/MirrorNG/MirrorNG/issues/1246)) ([7119dd1](7119dd1))
* don't call hook in host if no change,  fixes [#1142](#1142) ([#1143](#1143)) ([d8ce80f](d8ce80f))
* don't call OnStartLocalPlayer twice ([#1263](https://github.com/MirrorNG/MirrorNG/issues/1263)) ([c753089](c753089))
* don't convert null arrays to empty array ([#913](#913)) ([dd758ca](dd758ca))
* Don't disconnect host ([#608](#608)) ([c1707e5](c1707e5))
* Don't give host player authority by default ([#1158](#1158)) ([1fc1ed2](1fc1ed2))
* Don't increment counter in Awake ([#971](#971)) ([45b7118](45b7118))
* Don't set asset id for scene objects ([7e40232](7e40232))
* Don't set framerate in host mode ([4644bc4](4644bc4))
* Don't throw exception getting address ([7df3ce3](7df3ce3))
* don't use obsolete method ([12437ba](12437ba))
* Draw SyncVar label for Unity objects inline  ([#1291](https://github.com/MirrorNG/MirrorNG/issues/1291)) ([a0425e4](a0425e4))
* Dummy file for SyncListStructProcessor.cs ([#798](#798)) ([75e4f15](75e4f15))
* error when there are no network behaviors ([#1303](https://github.com/MirrorNG/MirrorNG/issues/1303)) ([dbe0643](dbe0643))
* error with missing assemblies ([#1052](#1052)) ([00eb23a](00eb23a)), closes [#1051](#1051)
* Fix error scene error message in host mode ([838d4f0](838d4f0))
* hasAuthority is now visible in all overrides ([#1251](https://github.com/MirrorNG/MirrorNG/issues/1251)) ([2f19c7c](2f19c7c)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* hooks in host mode can call each other ([#1017](#1017)) ([f27fd0b](f27fd0b))
* invalid scene id in 2019.1 by ignoring prefabs in NetworkScenePostProcess ([203a823](203a823))
* isClient now reports true onStartServer in host mode ([#1252](https://github.com/MirrorNG/MirrorNG/issues/1252)) ([d00c95b](d00c95b))
* isLocalPlayer is true during OnStartClient for Player ([#1255](https://github.com/MirrorNG/MirrorNG/issues/1255)) ([fb26d00](fb26d00)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* isLocalPlayer works in host mode onStartServer ([#1253](https://github.com/MirrorNG/MirrorNG/issues/1253)) ([9acde20](9acde20)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* it is not safe to modify this outside this class ([bc7a961](bc7a961))
* list server logs properly when disconnected ([f02d317](f02d317))
* ListServer Ping not found in WebGL ([6c4b34b](6c4b34b))
* Lobby Remove button not showing for P1 when Server Only ([377c47c](377c47c))
* maintain Unity's copyright notice ([#961](#961)) ([7718955](7718955))
* Make assembly definition 2018.4 compatible ([99ecc9e](99ecc9e))
* make build pass ([08df6d0](08df6d0))
* Mark weaver as failed if serializing invalid type ([03c767d](03c767d))
* missed ushort reader/writer ([74faf2a](74faf2a))
* Mono.CecilX namespace to work around Unity 2019 Cecil namespace collision ([#832](#832)) ([5262592](5262592))
* move listserver classes into package ([2668b17](2668b17))
* move NetworkStreamExtension in a namespace ([12de543](12de543))
* MultiplexTransport GetMaxMessageSize NullReferenceException when called on server. And fixes potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes. ([#1332](https://github.com/MirrorNG/MirrorNG/issues/1332)) ([b3127be](b3127be))
* NetworkBehaviourInspector wouldn't show SyncMode if syncvars / syncobjects were only private ([ed572da](ed572da))
* NetworkClient.Shutdown calls ClientScene.Shutdown again to properly clean up client scene. ClientScene only cleans up itself without touching transport or NetworkIdentities (fixes the bug where the player object wouldn't be destroyed after calling StopClient) ([fb716df](fb716df))
* NetworkManager OnValidate wouldn't properly save the automatically added Transport before because Undo.RecordObject is needed for that now. ([524abfc](524abfc))
* NetworkTransform clientAuthority works again via clientAuthority option that is configurable in inspector. this had to be fixed after we removed local authority. ([d712cd0](d712cd0))
* non ready connections should not observe objects ([1352334](1352334))
* null reference exception ([7ce95c5](7ce95c5))
* OnClientReady is called and passed the appropriate ready state value in NetworkLobbyPlayer ([#618](#618)) ([c9eac57](c9eac57))
* OnSetHostVisibility can now check if it has authority ([888e46c](888e46c))
* pack works if message is boxed ([55c9bb6](55c9bb6))
* Pass the name of the invoking class and desired command when an object has no authority. ([#1216](https://github.com/MirrorNG/MirrorNG/issues/1216)) ([701f4f4](701f4f4))
* Potential DOS attack by sending invalid UTF8 byte sequences  ([#727](#727)) ([3cee3ab](3cee3ab))
* Potential DOS attack on server by sending packed ulongs when packed uints are expected. ([#730](#730)) ([015d0d5](015d0d5))
* potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes when using FallbackTransport. ([#1331](https://github.com/MirrorNG/MirrorNG/issues/1331)) ([5449840](5449840))
* potential null reference exception with debug logging ([33493a0](33493a0))
* Prevent Compiler Paradox ([#1145](#1145)) ([fd43c67](fd43c67))
* properly stop client and server in OnApplicationQuit so that clients still get a chance to send then 'quit' packet instead of just timing out. Also fixes a bug where OnStopServer/OnStopClient were not called when stopping the Editor. ([#936](#936)) ([d6389e6](d6389e6))
* Rebuild observers when we switch scenes, fixes [#978](#978) ([#1016](#1016)) ([6dd1350](6dd1350))
* reduce allocations at the transport ([80e4f17](80e4f17))
* release unitypackage ([#1355](https://github.com/MirrorNG/MirrorNG/issues/1355)) ([d0cc669](d0cc669))
* remove samples from upm package ([#25](#25)) ([a71e21f](a71e21f))
* replace player (remove authority by default) ([#1261](https://github.com/MirrorNG/MirrorNG/issues/1261)) ([ad724fe](ad724fe)), closes [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257)
* ReplacePlayer now calls OnStartLocalPlayer ([#1280](https://github.com/MirrorNG/MirrorNG/issues/1280)) ([0e1bc81](0e1bc81)), closes [#962](#962)
* replacing the player does not mean giving up authority ([#1254](https://github.com/MirrorNG/MirrorNG/issues/1254)) ([a2c273e](a2c273e))
* Respect Player Prefab Position & Rotation ([#825](#825)) ([8ebda0f](8ebda0f))
* Revert "NetworkClient.Shutdown: call ClientScene.Shutdown, otherwise it's never called" - caused client's player to not be removed from scene after disconnecting ([13bb748](13bb748))
* Revert "NetworkIdentity.observers dictionary is always created, but always empty on clients. Gets rid of all null checks." to fix server-only bug not allowing movement on client, e.g. in uMMORPG ([f56507f](f56507f))
* Revert "refactor:  consolidate prefab and spawn handlers ([#817](#817))" to fix a bug where if editor=host, build=client, we receive scene object not found when walking out of and back into an observer's range ([1f07af0](1f07af0))
* Round Robin Spawning by Hierarchy Order ([#790](#790)) ([531e202](531e202)), closes [#724](#724)
* SceneId was not set to 0 for prefab variants ([#976](#976)) ([#977](#977)) ([2ca2c48](2ca2c48))
* set authority when replacing the player ([2195fee](2195fee))
* Set syncvar variables after calling the hook ([#659](#659)) ([2d63ee1](2d63ee1))
* set version number ([#1338](https://github.com/MirrorNG/MirrorNG/issues/1338)) ([0d1d7b5](0d1d7b5))
* spawnwithauthority works again in host mode ([5b04836](5b04836))
* Stop calling ClientDisconnect on host ([#597](#597)) ([b67b3e4](b67b3e4))
* suppress warning on standalone build [#1053](#1053) ([4ef680a](4ef680a))
* Suspend server transport while changing scenes ([#1169](#1169)) ([e8fac8a](e8fac8a))
* Sync full netAnimator for new clients, fix [#980](#980) ([#1110](#1110)) ([db8310f](db8310f))
* syncvars in commands work again ([#1131](#1131)) ([c24a73f](c24a73f))
* TargetRpc now works accross assemblies ([#1130](#1130)) ([5ecd646](5ecd646)), closes [#1128](#1128)
* Telepathy already supports IPv6, but can no also connect to IPv4-only servers again (e.g. Mirror Booster) ([488446a](488446a))
* Telepathy fix a bug where calling Disconnect while connecting to a dead end would freeze Unity because .Join would wait forever. Interrupt fixes it. ([3831cbd](3831cbd))
* Telepathy forgot to set socket options for accepted clients on the server ([22931fc](22931fc))
* Telepathy updated to latest version (IPv6 fix again) ([535b4d4](535b4d4))
* Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([98d3fb0](98d3fb0))
* Telepathy updated to latest version: Correctly support IPv4 and IPv6 sockets ([2761ff2](2761ff2))
* Telepathy updated to latest version. connectionId counter is properly reset after stopping server. ([abf06df](abf06df))
* TelepathyTransport.ToString UWP exception ([8a190bf](8a190bf))
* Updated Telepathy to latest version to fix IPAddress.Parse error for "localhost" ([cc6e4f6](cc6e4f6))
* version file ([#1337](https://github.com/MirrorNG/MirrorNG/issues/1337)) ([ed7e509](ed7e509))
* webgl build fix [#1136](#1136) ([#1137](#1137)) ([c85d0df](c85d0df))
* when modifying a prefab, Unity calls OnValidate for all scene objects based on that prefab, which caused Mirror to reset the sceneId because we only checked if a prefab is currently edited, not if THIS prefab is currently edited ([db99dd7](db99dd7))
* **serialization:** Added NetworkWriter tests, found and fixed a bug in Write(Ray). ([#769](#769)) ([99c8f5c](99c8f5c))
* **tests:** Added missing SyncListByteValid test file ([#634](#634)) ([b0af876](b0af876))
* **weaver:** [#696](#696) detect .mystruct = new MyStruct() changes with syncvars ([#702](#702)) ([053949b](053949b))
* **weaver:** fix [#706](#706) find system dlls ([#729](#729)) ([53be9b6](53be9b6))
* **weaver:** fix [#796](#796), reload assemblies after initial import ([#1106](#1106)) ([d91b387](d91b387))
* **websocket:** [#829](#829) fix InvalidOperationException with wss:// ([#830](#830)) ([2d682b5](2d682b5))
* **websocket:** Remove send queues (they never worked) and SSL (temporarily) ([#879](#879)) ([3c60b08](3c60b08))
* **websocket:** Use a buffer for most WS messages in WebGL client resulting in 0 alloc for most messages ([#848](#848)) ([8967a20](8967a20))
* Telepathy updated to latest version: protect against allocation attacks via MaxMessageSize. Can be configured in the TelepathyTransport component now. ([67d715f](67d715f))
* update NetworkIdentityEditor FindProperty to renamed variables ([a2cc14b](a2cc14b))
* weaver Cmd/Rpc/Target prefix check is no longer trash ([#707](#707)) ([699a261](699a261))
* workaround for [#791](#791) ([5c850aa](5c850aa))

### Features

* [#869](#869) support structs in other assemblies ([#1022](#1022)) ([62d1887](62d1887))
* Add roomPlayer parameter to OnRoomServerCreateGamePlayer ([#1317](https://github.com/MirrorNG/MirrorNG/issues/1317)) ([abf5cdc](abf5cdc))
* Add SyncHashSet and SyncSortedSet ([#685](#685)) ([695979e](695979e))
* Add Timeout to NetworkAuthenticator ([#1091](#1091)) ([e8cc9ba](e8cc9ba))
* Add UPM configuration ([#11](#11)) ([9280af1](9280af1))
* Add version to package file ([#1361](https://github.com/MirrorNG/MirrorNG/issues/1361)) ([e97ab93](e97ab93))
* Add weaver support for Vector2Int and Vector3Int ([#646](#646)) ([e2a6ce9](e2a6ce9))
* allow users to detect mirror version 3 ([ee9c737](ee9c737))
* An authenticator that times out other authenticators ([#1211](https://github.com/MirrorNG/MirrorNG/issues/1211)) ([09f6892](09f6892))
* Authentication Framework ([#1057](#1057)) ([56bcb02](56bcb02))
* Chat example ([#1305](https://github.com/MirrorNG/MirrorNG/issues/1305)) ([9926472](9926472))
* component based SyncToOwner, fixes [#39](#39) ([#1023](#1023)) ([c6d86b3](c6d86b3))
* custom reader/writer via extension methods ([#1047](#1047)) ([b45afad](b45afad))
* Custom readers and writers ([92b3e98](92b3e98))
* fallback transport now supports uri ([#1296](https://github.com/MirrorNG/MirrorNG/issues/1296)) ([e4a701e](e4a701e))
* generate serializers for IMessageBase structs ([#1353](https://github.com/MirrorNG/MirrorNG/issues/1353)) ([3c0bc28](3c0bc28))
* Implement IReadOnlyList<T> in SyncLists ([#903](#903)) ([3eaaa77](3eaaa77))
* Include version in release ([#1336](https://github.com/MirrorNG/MirrorNG/issues/1336)) ([e4f89cf](e4f89cf))
* LLAPI transport can receive port from uri ([#1294](https://github.com/MirrorNG/MirrorNG/issues/1294)) ([7865a84](7865a84))
* Mirror now supports message inheritance ([#1286](https://github.com/MirrorNG/MirrorNG/issues/1286)) ([f9d34d5](f9d34d5))
* Multiplex based on url ([#1295](https://github.com/MirrorNG/MirrorNG/issues/1295)) ([c206f9a](c206f9a))
* network writer pool to avoid expensive allocations ([3659acb](3659acb))
* network writer pool to avoid expensive allocations ([#928](#928)) ([f5e9318](f5e9318))
* NetworkConnection is optional for handlers ([#1202](https://github.com/MirrorNG/MirrorNG/issues/1202)) ([bf9eb61](bf9eb61))
* new way to connect using uri ([#1279](https://github.com/MirrorNG/MirrorNG/issues/1279)) ([7c3622c](7c3622c))
* Pass all information to spawn handler ([#1215](https://github.com/MirrorNG/MirrorNG/issues/1215)) ([d741bae](d741bae))
* profiler info is available in production builds ([5649cc6](5649cc6))
* Remove Command shortcut for host mode ([#1168](#1168)) ([94eda38](94eda38))
* safer and consistent writers names ([#979](#979)) ([b4077c1](b4077c1))
* Script Templates ([#1217](https://github.com/MirrorNG/MirrorNG/issues/1217)) ([8cf6a07](8cf6a07))
* Secure messages that require authentication, fixes [#720](#720) ([#1089](#1089)) ([7ac43cd](7ac43cd))
* Semantic release for UPM ([#24](#24)) ([8cbc005](8cbc005))
* ship as a unitypackage ([11edc14](11edc14))
* Show compile time error if overriding unused OnServerAddPlayer ([#682](#682)) ([a8599c1](a8599c1))
* support sending and receiving ArraySegment<byte> ([#898](#898)) ([e5eecbf](e5eecbf))
* support writing and reading array segments ([#918](#918)) ([f9ff443](f9ff443))
* SyncDictionary can now be used for any IDictionary ([#703](#703)) ([2683572](2683572))
* SyncList now supports any IList implementation ([#704](#704)) ([040bcb4](040bcb4))
* SyncList.FindIndex added ([#823](#823)) ([b5ff43a](b5ff43a))
* SyncSet custom Equality Comparer support ([#1147](#1147)) ([0f95185](0f95185))
* SyncToOwner now works with authority ([#1204](https://github.com/MirrorNG/MirrorNG/issues/1204)) ([92d0df7](92d0df7))
* telepathy can now receive port from uri ([#1284](https://github.com/MirrorNG/MirrorNG/issues/1284)) ([06946cf](06946cf))
* Transport can send to multiple connections at once ([#1120](#1120)) ([bc7e116](bc7e116))
* update upm package if tests pass ([#21](#21)) ([7447776](7447776))
* user friendly weaver error ([#896](#896)) ([954a3d5](954a3d5))
* Users may provide custom serializers for any type ([#1153](#1153)) ([9cb309e](9cb309e))
* websocket can receive port in url ([#1287](https://github.com/MirrorNG/MirrorNG/issues/1287)) ([c8ad118](c8ad118))
* Websockets now give client address, fix [#1121](#1121) ([#1125](#1125)) ([c9f317d](c9f317d))
* **scene:** Add support for scene loading params ([#644](#644)) ([d48a375](d48a375))
* **syncvar:** Add SyncDictionary ([#602](#602)) ([7d21bde](7d21bde))
* **telepathy:** Split MaxMessageSize to allow setting a different value for client and server ([#749](#749)) ([f0a8b5d](f0a8b5d))
* **websocket:** Re-enable native SSL ([#965](#965)) ([7ed4a9a](7ed4a9a))

### Performance Improvements

* AddPlayerMessage is now a value type ([246a551](246a551))
* allocation free enumerator for syncsets,  fixes [#1171](#1171) ([#1173](#1173)) ([035e630](035e630))
* allocation free syncdict foreach, fix [#1172](#1172) ([#1174](#1174)) ([1ec8910](1ec8910))
* avoid allocation for error messages ([c669ff1](c669ff1))
* Avoid allocation when reading message payload ([#912](#912)) ([11750a9](11750a9))
* avoid allocation with message structs ([#939](#939)) ([7c7c910](7c7c910))
* avoid boxing for getting message id ([#1144](#1144)) ([9513842](9513842))
* avoid boxing if there is no profiler ([a351879](a351879))
* ClientAuthorityMessage is now a value type ([#991](#991)) ([d071438](d071438))
* Custom IEnumerator for SyncLists to avoid allocations on foreach ([#904](#904)) ([4ffd5a2](4ffd5a2))
* don't varint bytes and shorts ([4867415](4867415))
* eliminate boxing with lists ([#901](#901)) ([8f6d4cb](8f6d4cb))
* eliminate small allocation on remote calls ([#907](#907)) ([1c18743](1c18743))
* eliminate string concat during remote method calls ([#908](#908)) ([70a532b](70a532b))
* empty messages are value types now ([145edaa](145edaa))
* messages should be value types ([#987](#987)) ([633fb19](633fb19))
* MultiplexTransport: avoid Linq allocations that would happen on every packet send because Send calls .ServerActive() each time ([7fe8888](7fe8888))
* Networkreader nonalloc ([#910](#910)) ([18f035d](18f035d))
* objdestroy message is now a value type ([#993](#993)) ([a32c5a9](a32c5a9))
* ObjHideMessage is now a value type ([#992](#992)) ([a49d938](a49d938))
* OnDeserializeSafely without GC ([#804](#804)) ([27b7e25](27b7e25))
* Optimize interest management ([f1ceb0c](f1ceb0c))
* Optimize interest management ([#899](#899)) ([ff1a234](ff1a234))
* Pack small 32 bit negatives efficiently ([480af1a](480af1a))
* Pack small 64 bit negatives efficiently ([5f1ef4a](5f1ef4a))
* Recycle argument writer to avoid allocations ([#945](#945)) ([9743216](9743216))
* Reduce enum bandwidth ([#794](#794)) ([97e9ac2](97e9ac2))
* remove allocations during syncvar sync ([#946](#946)) ([d2381ce](d2381ce))
* remove BinaryWriter,  it allocates like crazy ([#929](#929)) ([7b3e82a](7b3e82a))
* remove network transform allocation ([9e3ecc1](9e3ecc1))
* remove syncvar boxing ([#927](#927)) ([b2ba589](b2ba589))
* return the contents of the writer as an array segment ([#916](#916)) ([ced3690](ced3690))
* reuse the network writer used for rpc parameters ([5dafc4d](5dafc4d))
* rpc messages are now value types ([#997](#997)) ([b5b2f3e](b5b2f3e))
* SceneMessage is now a value type ([#989](#989)) ([407b36a](407b36a))
* spawn with client authority only takes 1 message ([#1206](https://github.com/MirrorNG/MirrorNG/issues/1206)) ([3b9414f](3b9414f))
* SpawnPrefabMessage is now a value type ([a44efd1](a44efd1))
* SpawnSceneObjectMessage is now a value type ([40c7d97](40c7d97))
* Transports now give ArraySegment<byte> instead of byte[] (based on [#569](#569) and [#846](#846)) ([77bee45](77bee45))
* update vars is now a value type ([#990](#990)) ([f99e71e](f99e71e))
* Use 0 for null byte arrays ([#925](#925)) ([21ca49d](21ca49d))
* use 0 for null strings ([#926](#926)) ([7181cd9](7181cd9))
* use bitshift operations instead of division in varint ([fff765c](fff765c))
* Use RemoveAt to remove elements from lists ([22b45f7](22b45f7))
* use value types for empty messages ([#988](#988)) ([81d915e](81d915e))
* Use WritePackedUInt32 in SyncList ([#688](#688)) ([2db7576](2db7576))

* Merge pull request #650 from vis2k/networkclient_static_2 ([fac0542](fac0542)), closes [#650](#650)

### BREAKING CHANGES

* Remove obsolete OnServerAddPlayer

Any person that overrides this method has a broken game.  These methods are never called anywhere.

The user gets a warning because they are overriding an obsolete method,  which might get ignored if they have lots of other warnings.   They would run their game and their game would not work at all.  No errors.

By removing these methods, users that override these methods will get a compile time error instead.  So they cannot ignore this error and they will fix it.

* Method is no longer available in NetworkLobbyManager
* Make NetworkClient Great Again!
github-actions bot referenced this pull request in MirageNet/Mirage Jan 4, 2020
# 1.0.0 (2020-01-04)

### Bug Fixes

* (again) Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([46eddc0](46eddc0))
* [#1359](https://github.com/MirrorNG/MirrorNG/issues/1359). Revert "Destroy objects owned by this connection when disconnecting ([#1179](#1179))" ([4cc4279](4cc4279))
* [#573](#573) (part 1) NetworkScenePostProcess handles NetworkIdentities of all scenes except DontDestroyOnLoad. this way it works for additively loaded scenes too. ([c1af84e](c1af84e))
* [#573](#573) (part 2) NetworkManager detects additive scene loads and respawns objects on server/client again ([e521a20](e521a20))
* [#573](#573) NullReferenceException because destroyed NetworkIdentities were never removed from sceneIds dict ([a2d6317](a2d6317))
* [#609](#609) by spawning observers in NetworkServer.AddPlayerForConnection after setting the controller. There is no point in trying to spawn with a null controller in SetReady, because by definition no one can observer something that is null. ([#623](#623)) ([5c00577](5c00577))
* [#640](#640) InternalReplacePlayerForConnection calls SpawnObserversForConnection now too ([bdf12c8](bdf12c8))
* [#651](#651) GetSceneAt assumes default scene ([#654](#654)) ([65eaba1](65eaba1))
* [#652](#652) OnPostProcessScene includes disabled NetworkIdentities in scene ([ee2ace8](ee2ace8))
* [#679](#679) package for unity ([4a6a4df](4a6a4df))
* [#679](#679) unity package ([9895647](9895647))
* [#692](#692) by always adding connectionToClient when rebuilding observers ([ab44ac8](ab44ac8))
* [#718](#718) remove Tests folder from unitypackage ([#827](#827)) ([7e487af](7e487af))
* [#791](#791) corrected assembly paths passed to weaver ([#803](#803)) ([3ba546e](3ba546e))
* [#791](#791) stack overflow in the weaver ([#792](#792)) ([7b57830](7b57830))
* [#840](#840) by allowing Mirror to respect the forceHidden flag ([#893](#893)) ([3ec3d02](3ec3d02))
* added new read/write symbol params ([#806](#806)) ([3a50ca6](3a50ca6))
* Added WriteBytesAndSize tests, and fixed the function to be pedantic. ([#773](#773)) ([72e4e55](72e4e55))
* Additive scene can respawn objects safely ([#1270](https://github.com/MirrorNG/MirrorNG/issues/1270)) ([8899d20](8899d20))
* ArraySegment<byte> work in Messages ([#919](#919)) ([981ba7c](981ba7c))
* Call hooks when initializing objects OnStartServer on host ([#1249](https://github.com/MirrorNG/MirrorNG/issues/1249)) ([7aa7815](7aa7815))
* call Obsoleted OnStartClient ([#681](#681)) ([8dea50e](8dea50e))
* call OnStartClient only once in room ([#1264](https://github.com/MirrorNG/MirrorNG/issues/1264)) ([4d373c5](4d373c5))
* check event prefix ([7417b68](7417b68))
* ClientRpc methods now work accross assemblies ([#1129](#1129)) ([13dbcb9](13dbcb9)), closes [#1128](#1128)
* Cmds can be called from child classes in other assemblies ([d8a98d8](d8a98d8)), closes [#1108](#1108)
* code generation works with il2cpp again ([#1056](#1056)) ([8738562](8738562))
* destroy owned objects ([#1352](https://github.com/MirrorNG/MirrorNG/issues/1352)) ([d7a58d2](d7a58d2)), closes [#1346](https://github.com/MirrorNG/MirrorNG/issues/1346) [#1206](https://github.com/MirrorNG/MirrorNG/issues/1206) [#1351](https://github.com/MirrorNG/MirrorNG/issues/1351)
* do not accumulate changes if there are no observers fixes [#963](#963) ([#964](#964)) ([64a0468](64a0468))
* Do not call InternalAddPlayer twice ([#1246](https://github.com/MirrorNG/MirrorNG/issues/1246)) ([7119dd1](7119dd1))
* don't call hook in host if no change,  fixes [#1142](#1142) ([#1143](#1143)) ([d8ce80f](d8ce80f))
* don't convert null arrays to empty array ([#913](#913)) ([dd758ca](dd758ca))
* Don't disconnect host ([#608](#608)) ([c1707e5](c1707e5))
* Don't give host player authority by default ([#1158](#1158)) ([1fc1ed2](1fc1ed2))
* Don't increment counter in Awake ([#971](#971)) ([45b7118](45b7118))
* Don't set asset id for scene objects ([7e40232](7e40232))
* Don't set framerate in host mode ([4644bc4](4644bc4))
* Don't throw exception getting address ([7df3ce3](7df3ce3))
* don't use obsolete method ([12437ba](12437ba))
* Draw SyncVar label for Unity objects inline  ([#1291](https://github.com/MirrorNG/MirrorNG/issues/1291)) ([a0425e4](a0425e4))
* Dummy file for SyncListStructProcessor.cs ([#798](#798)) ([75e4f15](75e4f15))
* error when there are no network behaviors ([#1303](https://github.com/MirrorNG/MirrorNG/issues/1303)) ([dbe0643](dbe0643))
* error with missing assemblies ([#1052](#1052)) ([00eb23a](00eb23a)), closes [#1051](#1051)
* Fix error scene error message in host mode ([838d4f0](838d4f0))
* hasAuthority is now visible in all overrides ([#1251](https://github.com/MirrorNG/MirrorNG/issues/1251)) ([2f19c7c](2f19c7c)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* hooks in host mode can call each other ([#1017](#1017)) ([f27fd0b](f27fd0b))
* invalid scene id in 2019.1 by ignoring prefabs in NetworkScenePostProcess ([203a823](203a823))
* isClient now reports true onStartServer in host mode ([#1252](https://github.com/MirrorNG/MirrorNG/issues/1252)) ([d00c95b](d00c95b))
* isLocalPlayer is true during OnStartClient for Player ([#1255](https://github.com/MirrorNG/MirrorNG/issues/1255)) ([fb26d00](fb26d00)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* isLocalPlayer works in host mode onStartServer ([#1253](https://github.com/MirrorNG/MirrorNG/issues/1253)) ([9acde20](9acde20)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* it is not safe to modify this outside this class ([bc7a961](bc7a961))
* list server logs properly when disconnected ([f02d317](f02d317))
* ListServer Ping not found in WebGL ([6c4b34b](6c4b34b))
* Lobby Remove button not showing for P1 when Server Only ([377c47c](377c47c))
* maintain Unity's copyright notice ([#961](#961)) ([7718955](7718955))
* Make assembly definition 2018.4 compatible ([99ecc9e](99ecc9e))
* make build pass ([08df6d0](08df6d0))
* Mark weaver as failed if serializing invalid type ([03c767d](03c767d))
* missed ushort reader/writer ([74faf2a](74faf2a))
* Mono.CecilX namespace to work around Unity 2019 Cecil namespace collision ([#832](#832)) ([5262592](5262592))
* move listserver classes into package ([2668b17](2668b17))
* move NetworkStreamExtension in a namespace ([12de543](12de543))
* MultiplexTransport GetMaxMessageSize NullReferenceException when called on server. And fixes potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes. ([#1332](https://github.com/MirrorNG/MirrorNG/issues/1332)) ([b3127be](b3127be))
* NetworkBehaviourInspector wouldn't show SyncMode if syncvars / syncobjects were only private ([ed572da](ed572da))
* NetworkClient.Shutdown calls ClientScene.Shutdown again to properly clean up client scene. ClientScene only cleans up itself without touching transport or NetworkIdentities (fixes the bug where the player object wouldn't be destroyed after calling StopClient) ([fb716df](fb716df))
* NetworkManager OnValidate wouldn't properly save the automatically added Transport before because Undo.RecordObject is needed for that now. ([524abfc](524abfc))
* NetworkTransform clientAuthority works again via clientAuthority option that is configurable in inspector. this had to be fixed after we removed local authority. ([d712cd0](d712cd0))
* non ready connections should not observe objects ([1352334](1352334))
* null reference exception ([7ce95c5](7ce95c5))
* OnClientReady is called and passed the appropriate ready state value in NetworkLobbyPlayer ([#618](#618)) ([c9eac57](c9eac57))
* OnSetHostVisibility can now check if it has authority ([888e46c](888e46c))
* pack works if message is boxed ([55c9bb6](55c9bb6))
* Pass the name of the invoking class and desired command when an object has no authority. ([#1216](https://github.com/MirrorNG/MirrorNG/issues/1216)) ([701f4f4](701f4f4))
* Potential DOS attack by sending invalid UTF8 byte sequences  ([#727](#727)) ([3cee3ab](3cee3ab))
* Potential DOS attack on server by sending packed ulongs when packed uints are expected. ([#730](#730)) ([015d0d5](015d0d5))
* potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes when using FallbackTransport. ([#1331](https://github.com/MirrorNG/MirrorNG/issues/1331)) ([5449840](5449840))
* potential null reference exception with debug logging ([33493a0](33493a0))
* Prevent Compiler Paradox ([#1145](#1145)) ([fd43c67](fd43c67))
* properly stop client and server in OnApplicationQuit so that clients still get a chance to send then 'quit' packet instead of just timing out. Also fixes a bug where OnStopServer/OnStopClient were not called when stopping the Editor. ([#936](#936)) ([d6389e6](d6389e6))
* Rebuild observers when we switch scenes, fixes [#978](#978) ([#1016](#1016)) ([6dd1350](6dd1350))
* reduce allocations at the transport ([80e4f17](80e4f17))
* release unitypackage ([#1355](https://github.com/MirrorNG/MirrorNG/issues/1355)) ([d0cc669](d0cc669))
* remove samples from upm package ([#25](#25)) ([a71e21f](a71e21f))
* replace player (remove authority by default) ([#1261](https://github.com/MirrorNG/MirrorNG/issues/1261)) ([ad724fe](ad724fe)), closes [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257)
* ReplacePlayer now calls OnStartLocalPlayer ([#1280](https://github.com/MirrorNG/MirrorNG/issues/1280)) ([0e1bc81](0e1bc81)), closes [#962](#962)
* replacing the player does not mean giving up authority ([#1254](https://github.com/MirrorNG/MirrorNG/issues/1254)) ([a2c273e](a2c273e))
* Respect Player Prefab Position & Rotation ([#825](#825)) ([8ebda0f](8ebda0f))
* Revert "NetworkClient.Shutdown: call ClientScene.Shutdown, otherwise it's never called" - caused client's player to not be removed from scene after disconnecting ([13bb748](13bb748))
* Revert "NetworkIdentity.observers dictionary is always created, but always empty on clients. Gets rid of all null checks." to fix server-only bug not allowing movement on client, e.g. in uMMORPG ([f56507f](f56507f))
* Revert "refactor:  consolidate prefab and spawn handlers ([#817](#817))" to fix a bug where if editor=host, build=client, we receive scene object not found when walking out of and back into an observer's range ([1f07af0](1f07af0))
* Round Robin Spawning by Hierarchy Order ([#790](#790)) ([531e202](531e202)), closes [#724](#724)
* SceneId was not set to 0 for prefab variants ([#976](#976)) ([#977](#977)) ([2ca2c48](2ca2c48))
* set authority when replacing the player ([2195fee](2195fee))
* Set syncvar variables after calling the hook ([#659](#659)) ([2d63ee1](2d63ee1))
* set version number ([#1338](https://github.com/MirrorNG/MirrorNG/issues/1338)) ([0d1d7b5](0d1d7b5))
* spawnwithauthority works again in host mode ([5b04836](5b04836))
* Stop calling ClientDisconnect on host ([#597](#597)) ([b67b3e4](b67b3e4))
* suppress warning on standalone build [#1053](#1053) ([4ef680a](4ef680a))
* Suspend server transport while changing scenes ([#1169](#1169)) ([e8fac8a](e8fac8a))
* Sync full netAnimator for new clients, fix [#980](#980) ([#1110](#1110)) ([db8310f](db8310f))
* syncvars in commands work again ([#1131](#1131)) ([c24a73f](c24a73f))
* TargetRpc now works accross assemblies ([#1130](#1130)) ([5ecd646](5ecd646)), closes [#1128](#1128)
* Telepathy already supports IPv6, but can no also connect to IPv4-only servers again (e.g. Mirror Booster) ([488446a](488446a))
* Telepathy fix a bug where calling Disconnect while connecting to a dead end would freeze Unity because .Join would wait forever. Interrupt fixes it. ([3831cbd](3831cbd))
* Telepathy forgot to set socket options for accepted clients on the server ([22931fc](22931fc))
* Telepathy updated to latest version (IPv6 fix again) ([535b4d4](535b4d4))
* Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([98d3fb0](98d3fb0))
* Telepathy updated to latest version: Correctly support IPv4 and IPv6 sockets ([2761ff2](2761ff2))
* Telepathy updated to latest version. connectionId counter is properly reset after stopping server. ([abf06df](abf06df))
* TelepathyTransport.ToString UWP exception ([8a190bf](8a190bf))
* Updated Telepathy to latest version to fix IPAddress.Parse error for "localhost" ([cc6e4f6](cc6e4f6))
* version file ([#1337](https://github.com/MirrorNG/MirrorNG/issues/1337)) ([ed7e509](ed7e509))
* webgl build fix [#1136](#1136) ([#1137](#1137)) ([c85d0df](c85d0df))
* when modifying a prefab, Unity calls OnValidate for all scene objects based on that prefab, which caused Mirror to reset the sceneId because we only checked if a prefab is currently edited, not if THIS prefab is currently edited ([db99dd7](db99dd7))
* **serialization:** Added NetworkWriter tests, found and fixed a bug in Write(Ray). ([#769](#769)) ([99c8f5c](99c8f5c))
* **tests:** Added missing SyncListByteValid test file ([#634](#634)) ([b0af876](b0af876))
* **weaver:** [#696](#696) detect .mystruct = new MyStruct() changes with syncvars ([#702](#702)) ([053949b](053949b))
* **weaver:** fix [#706](#706) find system dlls ([#729](#729)) ([53be9b6](53be9b6))
* **weaver:** fix [#796](#796), reload assemblies after initial import ([#1106](#1106)) ([d91b387](d91b387))
* **websocket:** [#829](#829) fix InvalidOperationException with wss:// ([#830](#830)) ([2d682b5](2d682b5))
* **websocket:** Remove send queues (they never worked) and SSL (temporarily) ([#879](#879)) ([3c60b08](3c60b08))
* **websocket:** Use a buffer for most WS messages in WebGL client resulting in 0 alloc for most messages ([#848](#848)) ([8967a20](8967a20))
* Telepathy updated to latest version: protect against allocation attacks via MaxMessageSize. Can be configured in the TelepathyTransport component now. ([67d715f](67d715f))
* update NetworkIdentityEditor FindProperty to renamed variables ([a2cc14b](a2cc14b))
* weaver Cmd/Rpc/Target prefix check is no longer trash ([#707](#707)) ([699a261](699a261))
* workaround for [#791](#791) ([5c850aa](5c850aa))

### Features

* [#869](#869) support structs in other assemblies ([#1022](#1022)) ([62d1887](62d1887))
* Add roomPlayer parameter to OnRoomServerCreateGamePlayer ([#1317](https://github.com/MirrorNG/MirrorNG/issues/1317)) ([abf5cdc](abf5cdc))
* Add SyncHashSet and SyncSortedSet ([#685](#685)) ([695979e](695979e))
* Add Timeout to NetworkAuthenticator ([#1091](#1091)) ([e8cc9ba](e8cc9ba))
* Add UPM configuration ([#11](#11)) ([9280af1](9280af1))
* Add version to package file ([#1361](https://github.com/MirrorNG/MirrorNG/issues/1361)) ([e97ab93](e97ab93))
* Add weaver support for Vector2Int and Vector3Int ([#646](#646)) ([e2a6ce9](e2a6ce9))
* allow users to detect mirror version 3 ([ee9c737](ee9c737))
* An authenticator that times out other authenticators ([#1211](https://github.com/MirrorNG/MirrorNG/issues/1211)) ([09f6892](09f6892))
* Authentication Framework ([#1057](#1057)) ([56bcb02](56bcb02))
* Chat example ([#1305](https://github.com/MirrorNG/MirrorNG/issues/1305)) ([9926472](9926472))
* component based SyncToOwner, fixes [#39](#39) ([#1023](#1023)) ([c6d86b3](c6d86b3))
* custom reader/writer via extension methods ([#1047](#1047)) ([b45afad](b45afad))
* Custom readers and writers ([92b3e98](92b3e98))
* fallback transport now supports uri ([#1296](https://github.com/MirrorNG/MirrorNG/issues/1296)) ([e4a701e](e4a701e))
* generate serializers for IMessageBase structs ([#1353](https://github.com/MirrorNG/MirrorNG/issues/1353)) ([3c0bc28](3c0bc28))
* Implement IReadOnlyList<T> in SyncLists ([#903](#903)) ([3eaaa77](3eaaa77))
* Include version in release ([#1336](https://github.com/MirrorNG/MirrorNG/issues/1336)) ([e4f89cf](e4f89cf))
* LLAPI transport can receive port from uri ([#1294](https://github.com/MirrorNG/MirrorNG/issues/1294)) ([7865a84](7865a84))
* Mirror now supports message inheritance ([#1286](https://github.com/MirrorNG/MirrorNG/issues/1286)) ([f9d34d5](f9d34d5))
* Multiplex based on url ([#1295](https://github.com/MirrorNG/MirrorNG/issues/1295)) ([c206f9a](c206f9a))
* network writer pool to avoid expensive allocations ([3659acb](3659acb))
* network writer pool to avoid expensive allocations ([#928](#928)) ([f5e9318](f5e9318))
* NetworkConnection is optional for handlers ([#1202](https://github.com/MirrorNG/MirrorNG/issues/1202)) ([bf9eb61](bf9eb61))
* new way to connect using uri ([#1279](https://github.com/MirrorNG/MirrorNG/issues/1279)) ([7c3622c](7c3622c))
* Pass all information to spawn handler ([#1215](https://github.com/MirrorNG/MirrorNG/issues/1215)) ([d741bae](d741bae))
* profiler info is available in production builds ([5649cc6](5649cc6))
* Remove Command shortcut for host mode ([#1168](#1168)) ([94eda38](94eda38))
* safer and consistent writers names ([#979](#979)) ([b4077c1](b4077c1))
* Script Templates ([#1217](https://github.com/MirrorNG/MirrorNG/issues/1217)) ([8cf6a07](8cf6a07))
* Secure messages that require authentication, fixes [#720](#720) ([#1089](#1089)) ([7ac43cd](7ac43cd))
* Semantic release for UPM ([#24](#24)) ([8cbc005](8cbc005))
* ship as a unitypackage ([11edc14](11edc14))
* Show compile time error if overriding unused OnServerAddPlayer ([#682](#682)) ([a8599c1](a8599c1))
* support sending and receiving ArraySegment<byte> ([#898](#898)) ([e5eecbf](e5eecbf))
* support writing and reading array segments ([#918](#918)) ([f9ff443](f9ff443))
* SyncDictionary can now be used for any IDictionary ([#703](#703)) ([2683572](2683572))
* SyncList now supports any IList implementation ([#704](#704)) ([040bcb4](040bcb4))
* SyncList.FindIndex added ([#823](#823)) ([b5ff43a](b5ff43a))
* SyncSet custom Equality Comparer support ([#1147](#1147)) ([0f95185](0f95185))
* SyncToOwner now works with authority ([#1204](https://github.com/MirrorNG/MirrorNG/issues/1204)) ([92d0df7](92d0df7))
* telepathy can now receive port from uri ([#1284](https://github.com/MirrorNG/MirrorNG/issues/1284)) ([06946cf](06946cf))
* Transport can send to multiple connections at once ([#1120](#1120)) ([bc7e116](bc7e116))
* update upm package if tests pass ([#21](#21)) ([7447776](7447776))
* user friendly weaver error ([#896](#896)) ([954a3d5](954a3d5))
* Users may provide custom serializers for any type ([#1153](#1153)) ([9cb309e](9cb309e))
* websocket can receive port in url ([#1287](https://github.com/MirrorNG/MirrorNG/issues/1287)) ([c8ad118](c8ad118))
* Websockets now give client address, fix [#1121](#1121) ([#1125](#1125)) ([c9f317d](c9f317d))
* **scene:** Add support for scene loading params ([#644](#644)) ([d48a375](d48a375))
* **syncvar:** Add SyncDictionary ([#602](#602)) ([7d21bde](7d21bde))
* **telepathy:** Split MaxMessageSize to allow setting a different value for client and server ([#749](#749)) ([f0a8b5d](f0a8b5d))
* **websocket:** Re-enable native SSL ([#965](#965)) ([7ed4a9a](7ed4a9a))

### Performance Improvements

* AddPlayerMessage is now a value type ([246a551](246a551))
* allocation free enumerator for syncsets,  fixes [#1171](#1171) ([#1173](#1173)) ([035e630](035e630))
* allocation free syncdict foreach, fix [#1172](#1172) ([#1174](#1174)) ([1ec8910](1ec8910))
* avoid allocation for error messages ([c669ff1](c669ff1))
* Avoid allocation when reading message payload ([#912](#912)) ([11750a9](11750a9))
* avoid allocation with message structs ([#939](#939)) ([7c7c910](7c7c910))
* avoid boxing for getting message id ([#1144](#1144)) ([9513842](9513842))
* avoid boxing if there is no profiler ([a351879](a351879))
* ClientAuthorityMessage is now a value type ([#991](#991)) ([d071438](d071438))
* Custom IEnumerator for SyncLists to avoid allocations on foreach ([#904](#904)) ([4ffd5a2](4ffd5a2))
* don't varint bytes and shorts ([4867415](4867415))
* eliminate boxing with lists ([#901](#901)) ([8f6d4cb](8f6d4cb))
* eliminate small allocation on remote calls ([#907](#907)) ([1c18743](1c18743))
* eliminate string concat during remote method calls ([#908](#908)) ([70a532b](70a532b))
* empty messages are value types now ([145edaa](145edaa))
* messages should be value types ([#987](#987)) ([633fb19](633fb19))
* MultiplexTransport: avoid Linq allocations that would happen on every packet send because Send calls .ServerActive() each time ([7fe8888](7fe8888))
* Networkreader nonalloc ([#910](#910)) ([18f035d](18f035d))
* objdestroy message is now a value type ([#993](#993)) ([a32c5a9](a32c5a9))
* ObjHideMessage is now a value type ([#992](#992)) ([a49d938](a49d938))
* OnDeserializeSafely without GC ([#804](#804)) ([27b7e25](27b7e25))
* Optimize interest management ([f1ceb0c](f1ceb0c))
* Optimize interest management ([#899](#899)) ([ff1a234](ff1a234))
* Pack small 32 bit negatives efficiently ([480af1a](480af1a))
* Pack small 64 bit negatives efficiently ([5f1ef4a](5f1ef4a))
* Recycle argument writer to avoid allocations ([#945](#945)) ([9743216](9743216))
* Reduce enum bandwidth ([#794](#794)) ([97e9ac2](97e9ac2))
* remove allocations during syncvar sync ([#946](#946)) ([d2381ce](d2381ce))
* remove BinaryWriter,  it allocates like crazy ([#929](#929)) ([7b3e82a](7b3e82a))
* remove network transform allocation ([9e3ecc1](9e3ecc1))
* remove syncvar boxing ([#927](#927)) ([b2ba589](b2ba589))
* return the contents of the writer as an array segment ([#916](#916)) ([ced3690](ced3690))
* reuse the network writer used for rpc parameters ([5dafc4d](5dafc4d))
* rpc messages are now value types ([#997](#997)) ([b5b2f3e](b5b2f3e))
* SceneMessage is now a value type ([#989](#989)) ([407b36a](407b36a))
* spawn with client authority only takes 1 message ([#1206](https://github.com/MirrorNG/MirrorNG/issues/1206)) ([3b9414f](3b9414f))
* SpawnPrefabMessage is now a value type ([a44efd1](a44efd1))
* SpawnSceneObjectMessage is now a value type ([40c7d97](40c7d97))
* Transports now give ArraySegment<byte> instead of byte[] (based on [#569](#569) and [#846](#846)) ([77bee45](77bee45))
* update vars is now a value type ([#990](#990)) ([f99e71e](f99e71e))
* Use 0 for null byte arrays ([#925](#925)) ([21ca49d](21ca49d))
* use 0 for null strings ([#926](#926)) ([7181cd9](7181cd9))
* use bitshift operations instead of division in varint ([fff765c](fff765c))
* Use RemoveAt to remove elements from lists ([22b45f7](22b45f7))
* use value types for empty messages ([#988](#988)) ([81d915e](81d915e))
* Use WritePackedUInt32 in SyncList ([#688](#688)) ([2db7576](2db7576))

* Merge pull request #650 from vis2k/networkclient_static_2 ([fac0542](fac0542)), closes [#650](#650)

### BREAKING CHANGES

* Remove obsolete OnServerAddPlayer

Any person that overrides this method has a broken game.  These methods are never called anywhere.

The user gets a warning because they are overriding an obsolete method,  which might get ignored if they have lots of other warnings.   They would run their game and their game would not work at all.  No errors.

By removing these methods, users that override these methods will get a compile time error instead.  So they cannot ignore this error and they will fix it.

* Method is no longer available in NetworkLobbyManager
* Make NetworkClient Great Again!
github-actions bot referenced this pull request in MirageNet/Mirage Jan 12, 2020
github-actions bot referenced this pull request in MirageNet/Mirage Jan 12, 2020
# 1.0.0 (2020-01-04)

### Bug Fixes

* (again) Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([46eddc0](46eddc0))
* [#1359](https://github.com/MirrorNG/MirrorNG/issues/1359). Revert "Destroy objects owned by this connection when disconnecting ([#1179](#1179))" ([4cc4279](4cc4279))
* [#573](#573) (part 1) NetworkScenePostProcess handles NetworkIdentities of all scenes except DontDestroyOnLoad. this way it works for additively loaded scenes too. ([c1af84e](c1af84e))
* [#573](#573) (part 2) NetworkManager detects additive scene loads and respawns objects on server/client again ([e521a20](e521a20))
* [#573](#573) NullReferenceException because destroyed NetworkIdentities were never removed from sceneIds dict ([a2d6317](a2d6317))
* [#609](#609) by spawning observers in NetworkServer.AddPlayerForConnection after setting the controller. There is no point in trying to spawn with a null controller in SetReady, because by definition no one can observer something that is null. ([#623](#623)) ([5c00577](5c00577))
* [#640](#640) InternalReplacePlayerForConnection calls SpawnObserversForConnection now too ([bdf12c8](bdf12c8))
* [#651](#651) GetSceneAt assumes default scene ([#654](#654)) ([65eaba1](65eaba1))
* [#652](#652) OnPostProcessScene includes disabled NetworkIdentities in scene ([ee2ace8](ee2ace8))
* [#679](#679) package for unity ([4a6a4df](4a6a4df))
* [#679](#679) unity package ([9895647](9895647))
* [#692](#692) by always adding connectionToClient when rebuilding observers ([ab44ac8](ab44ac8))
* [#718](#718) remove Tests folder from unitypackage ([#827](#827)) ([7e487af](7e487af))
* [#791](#791) corrected assembly paths passed to weaver ([#803](#803)) ([3ba546e](3ba546e))
* [#791](#791) stack overflow in the weaver ([#792](#792)) ([7b57830](7b57830))
* [#840](#840) by allowing Mirror to respect the forceHidden flag ([#893](#893)) ([3ec3d02](3ec3d02))
* added new read/write symbol params ([#806](#806)) ([3a50ca6](3a50ca6))
* Added WriteBytesAndSize tests, and fixed the function to be pedantic. ([#773](#773)) ([72e4e55](72e4e55))
* Additive scene can respawn objects safely ([#1270](https://github.com/MirrorNG/MirrorNG/issues/1270)) ([8899d20](8899d20))
* ArraySegment<byte> work in Messages ([#919](#919)) ([981ba7c](981ba7c))
* Call hooks when initializing objects OnStartServer on host ([#1249](https://github.com/MirrorNG/MirrorNG/issues/1249)) ([7aa7815](7aa7815))
* call Obsoleted OnStartClient ([#681](#681)) ([8dea50e](8dea50e))
* call OnStartClient only once in room ([#1264](https://github.com/MirrorNG/MirrorNG/issues/1264)) ([4d373c5](4d373c5))
* check event prefix ([7417b68](7417b68))
* ClientRpc methods now work accross assemblies ([#1129](#1129)) ([13dbcb9](13dbcb9)), closes [#1128](#1128)
* Cmds can be called from child classes in other assemblies ([d8a98d8](d8a98d8)), closes [#1108](#1108)
* code generation works with il2cpp again ([#1056](#1056)) ([8738562](8738562))
* destroy owned objects ([#1352](https://github.com/MirrorNG/MirrorNG/issues/1352)) ([d7a58d2](d7a58d2)), closes [#1346](https://github.com/MirrorNG/MirrorNG/issues/1346) [#1206](https://github.com/MirrorNG/MirrorNG/issues/1206) [#1351](https://github.com/MirrorNG/MirrorNG/issues/1351)
* do not accumulate changes if there are no observers fixes [#963](#963) ([#964](#964)) ([64a0468](64a0468))
* Do not call InternalAddPlayer twice ([#1246](https://github.com/MirrorNG/MirrorNG/issues/1246)) ([7119dd1](7119dd1))
* don't call hook in host if no change,  fixes [#1142](#1142) ([#1143](#1143)) ([d8ce80f](d8ce80f))
* don't call OnStartLocalPlayer twice ([#1263](https://github.com/MirrorNG/MirrorNG/issues/1263)) ([c753089](c753089))
* don't convert null arrays to empty array ([#913](#913)) ([dd758ca](dd758ca))
* Don't disconnect host ([#608](#608)) ([c1707e5](c1707e5))
* Don't give host player authority by default ([#1158](#1158)) ([1fc1ed2](1fc1ed2))
* Don't increment counter in Awake ([#971](#971)) ([45b7118](45b7118))
* Don't set asset id for scene objects ([7e40232](7e40232))
* Don't set framerate in host mode ([4644bc4](4644bc4))
* Don't throw exception getting address ([7df3ce3](7df3ce3))
* don't use obsolete method ([12437ba](12437ba))
* Draw SyncVar label for Unity objects inline  ([#1291](https://github.com/MirrorNG/MirrorNG/issues/1291)) ([a0425e4](a0425e4))
* Dummy file for SyncListStructProcessor.cs ([#798](#798)) ([75e4f15](75e4f15))
* error when there are no network behaviors ([#1303](https://github.com/MirrorNG/MirrorNG/issues/1303)) ([dbe0643](dbe0643))
* error with missing assemblies ([#1052](#1052)) ([00eb23a](00eb23a)), closes [#1051](#1051)
* Fix error scene error message in host mode ([838d4f0](838d4f0))
* hasAuthority is now visible in all overrides ([#1251](https://github.com/MirrorNG/MirrorNG/issues/1251)) ([2f19c7c](2f19c7c)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* hooks in host mode can call each other ([#1017](#1017)) ([f27fd0b](f27fd0b))
* invalid scene id in 2019.1 by ignoring prefabs in NetworkScenePostProcess ([203a823](203a823))
* isClient now reports true onStartServer in host mode ([#1252](https://github.com/MirrorNG/MirrorNG/issues/1252)) ([d00c95b](d00c95b))
* isLocalPlayer is true during OnStartClient for Player ([#1255](https://github.com/MirrorNG/MirrorNG/issues/1255)) ([fb26d00](fb26d00)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* isLocalPlayer works in host mode onStartServer ([#1253](https://github.com/MirrorNG/MirrorNG/issues/1253)) ([9acde20](9acde20)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* it is not safe to modify this outside this class ([bc7a961](bc7a961))
* list server logs properly when disconnected ([f02d317](f02d317))
* ListServer Ping not found in WebGL ([6c4b34b](6c4b34b))
* Lobby Remove button not showing for P1 when Server Only ([377c47c](377c47c))
* maintain Unity's copyright notice ([#961](#961)) ([7718955](7718955))
* Make assembly definition 2018.4 compatible ([99ecc9e](99ecc9e))
* make build pass ([08df6d0](08df6d0))
* Mark weaver as failed if serializing invalid type ([03c767d](03c767d))
* missed ushort reader/writer ([74faf2a](74faf2a))
* Mono.CecilX namespace to work around Unity 2019 Cecil namespace collision ([#832](#832)) ([5262592](5262592))
* move listserver classes into package ([2668b17](2668b17))
* move NetworkStreamExtension in a namespace ([12de543](12de543))
* MultiplexTransport GetMaxMessageSize NullReferenceException when called on server. And fixes potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes. ([#1332](https://github.com/MirrorNG/MirrorNG/issues/1332)) ([b3127be](b3127be))
* NetworkBehaviourInspector wouldn't show SyncMode if syncvars / syncobjects were only private ([ed572da](ed572da))
* NetworkClient.Shutdown calls ClientScene.Shutdown again to properly clean up client scene. ClientScene only cleans up itself without touching transport or NetworkIdentities (fixes the bug where the player object wouldn't be destroyed after calling StopClient) ([fb716df](fb716df))
* NetworkManager OnValidate wouldn't properly save the automatically added Transport before because Undo.RecordObject is needed for that now. ([524abfc](524abfc))
* NetworkTransform clientAuthority works again via clientAuthority option that is configurable in inspector. this had to be fixed after we removed local authority. ([d712cd0](d712cd0))
* non ready connections should not observe objects ([1352334](1352334))
* null reference exception ([7ce95c5](7ce95c5))
* OnClientReady is called and passed the appropriate ready state value in NetworkLobbyPlayer ([#618](#618)) ([c9eac57](c9eac57))
* OnSetHostVisibility can now check if it has authority ([888e46c](888e46c))
* pack works if message is boxed ([55c9bb6](55c9bb6))
* Pass the name of the invoking class and desired command when an object has no authority. ([#1216](https://github.com/MirrorNG/MirrorNG/issues/1216)) ([701f4f4](701f4f4))
* Potential DOS attack by sending invalid UTF8 byte sequences  ([#727](#727)) ([3cee3ab](3cee3ab))
* Potential DOS attack on server by sending packed ulongs when packed uints are expected. ([#730](#730)) ([015d0d5](015d0d5))
* potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes when using FallbackTransport. ([#1331](https://github.com/MirrorNG/MirrorNG/issues/1331)) ([5449840](5449840))
* potential null reference exception with debug logging ([33493a0](33493a0))
* Prevent Compiler Paradox ([#1145](#1145)) ([fd43c67](fd43c67))
* properly stop client and server in OnApplicationQuit so that clients still get a chance to send then 'quit' packet instead of just timing out. Also fixes a bug where OnStopServer/OnStopClient were not called when stopping the Editor. ([#936](#936)) ([d6389e6](d6389e6))
* Rebuild observers when we switch scenes, fixes [#978](#978) ([#1016](#1016)) ([6dd1350](6dd1350))
* reduce allocations at the transport ([80e4f17](80e4f17))
* release unitypackage ([#1355](https://github.com/MirrorNG/MirrorNG/issues/1355)) ([d0cc669](d0cc669))
* remove samples from upm package ([#25](#25)) ([a71e21f](a71e21f))
* replace player (remove authority by default) ([#1261](https://github.com/MirrorNG/MirrorNG/issues/1261)) ([ad724fe](ad724fe)), closes [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257)
* ReplacePlayer now calls OnStartLocalPlayer ([#1280](https://github.com/MirrorNG/MirrorNG/issues/1280)) ([0e1bc81](0e1bc81)), closes [#962](#962)
* replacing the player does not mean giving up authority ([#1254](https://github.com/MirrorNG/MirrorNG/issues/1254)) ([a2c273e](a2c273e))
* Respect Player Prefab Position & Rotation ([#825](#825)) ([8ebda0f](8ebda0f))
* Revert "NetworkClient.Shutdown: call ClientScene.Shutdown, otherwise it's never called" - caused client's player to not be removed from scene after disconnecting ([13bb748](13bb748))
* Revert "NetworkIdentity.observers dictionary is always created, but always empty on clients. Gets rid of all null checks." to fix server-only bug not allowing movement on client, e.g. in uMMORPG ([f56507f](f56507f))
* Revert "refactor:  consolidate prefab and spawn handlers ([#817](#817))" to fix a bug where if editor=host, build=client, we receive scene object not found when walking out of and back into an observer's range ([1f07af0](1f07af0))
* Round Robin Spawning by Hierarchy Order ([#790](#790)) ([531e202](531e202)), closes [#724](#724)
* SceneId was not set to 0 for prefab variants ([#976](#976)) ([#977](#977)) ([2ca2c48](2ca2c48))
* set authority when replacing the player ([2195fee](2195fee))
* Set syncvar variables after calling the hook ([#659](#659)) ([2d63ee1](2d63ee1))
* set version number ([#1338](https://github.com/MirrorNG/MirrorNG/issues/1338)) ([0d1d7b5](0d1d7b5))
* spawnwithauthority works again in host mode ([5b04836](5b04836))
* Stop calling ClientDisconnect on host ([#597](#597)) ([b67b3e4](b67b3e4))
* suppress warning on standalone build [#1053](#1053) ([4ef680a](4ef680a))
* Suspend server transport while changing scenes ([#1169](#1169)) ([e8fac8a](e8fac8a))
* Sync full netAnimator for new clients, fix [#980](#980) ([#1110](#1110)) ([db8310f](db8310f))
* syncvars in commands work again ([#1131](#1131)) ([c24a73f](c24a73f))
* TargetRpc now works accross assemblies ([#1130](#1130)) ([5ecd646](5ecd646)), closes [#1128](#1128)
* Telepathy already supports IPv6, but can no also connect to IPv4-only servers again (e.g. Mirror Booster) ([488446a](488446a))
* Telepathy fix a bug where calling Disconnect while connecting to a dead end would freeze Unity because .Join would wait forever. Interrupt fixes it. ([3831cbd](3831cbd))
* Telepathy forgot to set socket options for accepted clients on the server ([22931fc](22931fc))
* Telepathy updated to latest version (IPv6 fix again) ([535b4d4](535b4d4))
* Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([98d3fb0](98d3fb0))
* Telepathy updated to latest version: Correctly support IPv4 and IPv6 sockets ([2761ff2](2761ff2))
* Telepathy updated to latest version. connectionId counter is properly reset after stopping server. ([abf06df](abf06df))
* TelepathyTransport.ToString UWP exception ([8a190bf](8a190bf))
* Updated Telepathy to latest version to fix IPAddress.Parse error for "localhost" ([cc6e4f6](cc6e4f6))
* version file ([#1337](https://github.com/MirrorNG/MirrorNG/issues/1337)) ([ed7e509](ed7e509))
* webgl build fix [#1136](#1136) ([#1137](#1137)) ([c85d0df](c85d0df))
* when modifying a prefab, Unity calls OnValidate for all scene objects based on that prefab, which caused Mirror to reset the sceneId because we only checked if a prefab is currently edited, not if THIS prefab is currently edited ([db99dd7](db99dd7))
* **serialization:** Added NetworkWriter tests, found and fixed a bug in Write(Ray). ([#769](#769)) ([99c8f5c](99c8f5c))
* **tests:** Added missing SyncListByteValid test file ([#634](#634)) ([b0af876](b0af876))
* **weaver:** [#696](#696) detect .mystruct = new MyStruct() changes with syncvars ([#702](#702)) ([053949b](053949b))
* **weaver:** fix [#706](#706) find system dlls ([#729](#729)) ([53be9b6](53be9b6))
* **weaver:** fix [#796](#796), reload assemblies after initial import ([#1106](#1106)) ([d91b387](d91b387))
* **websocket:** [#829](#829) fix InvalidOperationException with wss:// ([#830](#830)) ([2d682b5](2d682b5))
* **websocket:** Remove send queues (they never worked) and SSL (temporarily) ([#879](#879)) ([3c60b08](3c60b08))
* **websocket:** Use a buffer for most WS messages in WebGL client resulting in 0 alloc for most messages ([#848](#848)) ([8967a20](8967a20))
* Telepathy updated to latest version: protect against allocation attacks via MaxMessageSize. Can be configured in the TelepathyTransport component now. ([67d715f](67d715f))
* update NetworkIdentityEditor FindProperty to renamed variables ([a2cc14b](a2cc14b))
* weaver Cmd/Rpc/Target prefix check is no longer trash ([#707](#707)) ([699a261](699a261))
* workaround for [#791](#791) ([5c850aa](5c850aa))

### Features

* [#869](#869) support structs in other assemblies ([#1022](#1022)) ([62d1887](62d1887))
* Add roomPlayer parameter to OnRoomServerCreateGamePlayer ([#1317](https://github.com/MirrorNG/MirrorNG/issues/1317)) ([abf5cdc](abf5cdc))
* Add SyncHashSet and SyncSortedSet ([#685](#685)) ([695979e](695979e))
* Add Timeout to NetworkAuthenticator ([#1091](#1091)) ([e8cc9ba](e8cc9ba))
* Add UPM configuration ([#11](#11)) ([9280af1](9280af1))
* Add version to package file ([#1361](https://github.com/MirrorNG/MirrorNG/issues/1361)) ([e97ab93](e97ab93))
* Add weaver support for Vector2Int and Vector3Int ([#646](#646)) ([e2a6ce9](e2a6ce9))
* allow users to detect mirror version 3 ([ee9c737](ee9c737))
* An authenticator that times out other authenticators ([#1211](https://github.com/MirrorNG/MirrorNG/issues/1211)) ([09f6892](09f6892))
* Authentication Framework ([#1057](#1057)) ([56bcb02](56bcb02))
* Chat example ([#1305](https://github.com/MirrorNG/MirrorNG/issues/1305)) ([9926472](9926472))
* component based SyncToOwner, fixes [#39](#39) ([#1023](#1023)) ([c6d86b3](c6d86b3))
* custom reader/writer via extension methods ([#1047](#1047)) ([b45afad](b45afad))
* Custom readers and writers ([92b3e98](92b3e98))
* fallback transport now supports uri ([#1296](https://github.com/MirrorNG/MirrorNG/issues/1296)) ([e4a701e](e4a701e))
* generate serializers for IMessageBase structs ([#1353](https://github.com/MirrorNG/MirrorNG/issues/1353)) ([3c0bc28](3c0bc28))
* Implement IReadOnlyList<T> in SyncLists ([#903](#903)) ([3eaaa77](3eaaa77))
* Include version in release ([#1336](https://github.com/MirrorNG/MirrorNG/issues/1336)) ([e4f89cf](e4f89cf))
* LLAPI transport can receive port from uri ([#1294](https://github.com/MirrorNG/MirrorNG/issues/1294)) ([7865a84](7865a84))
* Mirror now supports message inheritance ([#1286](https://github.com/MirrorNG/MirrorNG/issues/1286)) ([f9d34d5](f9d34d5))
* Multiplex based on url ([#1295](https://github.com/MirrorNG/MirrorNG/issues/1295)) ([c206f9a](c206f9a))
* network writer pool to avoid expensive allocations ([3659acb](3659acb))
* network writer pool to avoid expensive allocations ([#928](#928)) ([f5e9318](f5e9318))
* NetworkConnection is optional for handlers ([#1202](https://github.com/MirrorNG/MirrorNG/issues/1202)) ([bf9eb61](bf9eb61))
* new way to connect using uri ([#1279](https://github.com/MirrorNG/MirrorNG/issues/1279)) ([7c3622c](7c3622c))
* Pass all information to spawn handler ([#1215](https://github.com/MirrorNG/MirrorNG/issues/1215)) ([d741bae](d741bae))
* profiler info is available in production builds ([5649cc6](5649cc6))
* Remove Command shortcut for host mode ([#1168](#1168)) ([94eda38](94eda38))
* safer and consistent writers names ([#979](#979)) ([b4077c1](b4077c1))
* Script Templates ([#1217](https://github.com/MirrorNG/MirrorNG/issues/1217)) ([8cf6a07](8cf6a07))
* Secure messages that require authentication, fixes [#720](#720) ([#1089](#1089)) ([7ac43cd](7ac43cd))
* Semantic release for UPM ([#24](#24)) ([8cbc005](8cbc005))
* ship as a unitypackage ([11edc14](11edc14))
* Show compile time error if overriding unused OnServerAddPlayer ([#682](#682)) ([a8599c1](a8599c1))
* support sending and receiving ArraySegment<byte> ([#898](#898)) ([e5eecbf](e5eecbf))
* support writing and reading array segments ([#918](#918)) ([f9ff443](f9ff443))
* SyncDictionary can now be used for any IDictionary ([#703](#703)) ([2683572](2683572))
* SyncList now supports any IList implementation ([#704](#704)) ([040bcb4](040bcb4))
* SyncList.FindIndex added ([#823](#823)) ([b5ff43a](b5ff43a))
* SyncSet custom Equality Comparer support ([#1147](#1147)) ([0f95185](0f95185))
* SyncToOwner now works with authority ([#1204](https://github.com/MirrorNG/MirrorNG/issues/1204)) ([92d0df7](92d0df7))
* telepathy can now receive port from uri ([#1284](https://github.com/MirrorNG/MirrorNG/issues/1284)) ([06946cf](06946cf))
* Transport can send to multiple connections at once ([#1120](#1120)) ([bc7e116](bc7e116))
* update upm package if tests pass ([#21](#21)) ([7447776](7447776))
* user friendly weaver error ([#896](#896)) ([954a3d5](954a3d5))
* Users may provide custom serializers for any type ([#1153](#1153)) ([9cb309e](9cb309e))
* websocket can receive port in url ([#1287](https://github.com/MirrorNG/MirrorNG/issues/1287)) ([c8ad118](c8ad118))
* Websockets now give client address, fix [#1121](#1121) ([#1125](#1125)) ([c9f317d](c9f317d))
* **scene:** Add support for scene loading params ([#644](#644)) ([d48a375](d48a375))
* **syncvar:** Add SyncDictionary ([#602](#602)) ([7d21bde](7d21bde))
* **telepathy:** Split MaxMessageSize to allow setting a different value for client and server ([#749](#749)) ([f0a8b5d](f0a8b5d))
* **websocket:** Re-enable native SSL ([#965](#965)) ([7ed4a9a](7ed4a9a))

### Performance Improvements

* AddPlayerMessage is now a value type ([246a551](246a551))
* allocation free enumerator for syncsets,  fixes [#1171](#1171) ([#1173](#1173)) ([035e630](035e630))
* allocation free syncdict foreach, fix [#1172](#1172) ([#1174](#1174)) ([1ec8910](1ec8910))
* avoid allocation for error messages ([c669ff1](c669ff1))
* Avoid allocation when reading message payload ([#912](#912)) ([11750a9](11750a9))
* avoid allocation with message structs ([#939](#939)) ([7c7c910](7c7c910))
* avoid boxing for getting message id ([#1144](#1144)) ([9513842](9513842))
* avoid boxing if there is no profiler ([a351879](a351879))
* ClientAuthorityMessage is now a value type ([#991](#991)) ([d071438](d071438))
* Custom IEnumerator for SyncLists to avoid allocations on foreach ([#904](#904)) ([4ffd5a2](4ffd5a2))
* don't varint bytes and shorts ([4867415](4867415))
* eliminate boxing with lists ([#901](#901)) ([8f6d4cb](8f6d4cb))
* eliminate small allocation on remote calls ([#907](#907)) ([1c18743](1c18743))
* eliminate string concat during remote method calls ([#908](#908)) ([70a532b](70a532b))
* empty messages are value types now ([145edaa](145edaa))
* messages should be value types ([#987](#987)) ([633fb19](633fb19))
* MultiplexTransport: avoid Linq allocations that would happen on every packet send because Send calls .ServerActive() each time ([7fe8888](7fe8888))
* Networkreader nonalloc ([#910](#910)) ([18f035d](18f035d))
* objdestroy message is now a value type ([#993](#993)) ([a32c5a9](a32c5a9))
* ObjHideMessage is now a value type ([#992](#992)) ([a49d938](a49d938))
* OnDeserializeSafely without GC ([#804](#804)) ([27b7e25](27b7e25))
* Optimize interest management ([f1ceb0c](f1ceb0c))
* Optimize interest management ([#899](#899)) ([ff1a234](ff1a234))
* Pack small 32 bit negatives efficiently ([480af1a](480af1a))
* Pack small 64 bit negatives efficiently ([5f1ef4a](5f1ef4a))
* Recycle argument writer to avoid allocations ([#945](#945)) ([9743216](9743216))
* Reduce enum bandwidth ([#794](#794)) ([97e9ac2](97e9ac2))
* remove allocations during syncvar sync ([#946](#946)) ([d2381ce](d2381ce))
* remove BinaryWriter,  it allocates like crazy ([#929](#929)) ([7b3e82a](7b3e82a))
* remove network transform allocation ([9e3ecc1](9e3ecc1))
* remove syncvar boxing ([#927](#927)) ([b2ba589](b2ba589))
* return the contents of the writer as an array segment ([#916](#916)) ([ced3690](ced3690))
* reuse the network writer used for rpc parameters ([5dafc4d](5dafc4d))
* rpc messages are now value types ([#997](#997)) ([b5b2f3e](b5b2f3e))
* SceneMessage is now a value type ([#989](#989)) ([407b36a](407b36a))
* spawn with client authority only takes 1 message ([#1206](https://github.com/MirrorNG/MirrorNG/issues/1206)) ([3b9414f](3b9414f))
* SpawnPrefabMessage is now a value type ([a44efd1](a44efd1))
* SpawnSceneObjectMessage is now a value type ([40c7d97](40c7d97))
* Transports now give ArraySegment<byte> instead of byte[] (based on [#569](#569) and [#846](#846)) ([77bee45](77bee45))
* update vars is now a value type ([#990](#990)) ([f99e71e](f99e71e))
* Use 0 for null byte arrays ([#925](#925)) ([21ca49d](21ca49d))
* use 0 for null strings ([#926](#926)) ([7181cd9](7181cd9))
* use bitshift operations instead of division in varint ([fff765c](fff765c))
* Use RemoveAt to remove elements from lists ([22b45f7](22b45f7))
* use value types for empty messages ([#988](#988)) ([81d915e](81d915e))
* Use WritePackedUInt32 in SyncList ([#688](#688)) ([2db7576](2db7576))

* Merge pull request #650 from vis2k/networkclient_static_2 ([fac0542](fac0542)), closes [#650](#650)

### BREAKING CHANGES

* Remove obsolete OnServerAddPlayer

Any person that overrides this method has a broken game.  These methods are never called anywhere.

The user gets a warning because they are overriding an obsolete method,  which might get ignored if they have lots of other warnings.   They would run their game and their game would not work at all.  No errors.

By removing these methods, users that override these methods will get a compile time error instead.  So they cannot ignore this error and they will fix it.

* Method is no longer available in NetworkLobbyManager
* Make NetworkClient Great Again!
github-actions bot referenced this pull request in MirageNet/Mirage Jan 12, 2020
# 1.0.0 (2020-01-04)

### Bug Fixes

* (again) Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([46eddc0](46eddc0))
* [#1359](https://github.com/MirrorNG/MirrorNG/issues/1359). Revert "Destroy objects owned by this connection when disconnecting ([#1179](#1179))" ([4cc4279](4cc4279))
* [#573](#573) (part 1) NetworkScenePostProcess handles NetworkIdentities of all scenes except DontDestroyOnLoad. this way it works for additively loaded scenes too. ([c1af84e](c1af84e))
* [#573](#573) (part 2) NetworkManager detects additive scene loads and respawns objects on server/client again ([e521a20](e521a20))
* [#573](#573) NullReferenceException because destroyed NetworkIdentities were never removed from sceneIds dict ([a2d6317](a2d6317))
* [#609](#609) by spawning observers in NetworkServer.AddPlayerForConnection after setting the controller. There is no point in trying to spawn with a null controller in SetReady, because by definition no one can observer something that is null. ([#623](#623)) ([5c00577](5c00577))
* [#640](#640) InternalReplacePlayerForConnection calls SpawnObserversForConnection now too ([bdf12c8](bdf12c8))
* [#651](#651) GetSceneAt assumes default scene ([#654](#654)) ([65eaba1](65eaba1))
* [#652](#652) OnPostProcessScene includes disabled NetworkIdentities in scene ([ee2ace8](ee2ace8))
* [#679](#679) package for unity ([4a6a4df](4a6a4df))
* [#679](#679) unity package ([9895647](9895647))
* [#692](#692) by always adding connectionToClient when rebuilding observers ([ab44ac8](ab44ac8))
* [#718](#718) remove Tests folder from unitypackage ([#827](#827)) ([7e487af](7e487af))
* [#791](#791) corrected assembly paths passed to weaver ([#803](#803)) ([3ba546e](3ba546e))
* [#791](#791) stack overflow in the weaver ([#792](#792)) ([7b57830](7b57830))
* [#840](#840) by allowing Mirror to respect the forceHidden flag ([#893](#893)) ([3ec3d02](3ec3d02))
* added new read/write symbol params ([#806](#806)) ([3a50ca6](3a50ca6))
* Added WriteBytesAndSize tests, and fixed the function to be pedantic. ([#773](#773)) ([72e4e55](72e4e55))
* Additive scene can respawn objects safely ([#1270](https://github.com/MirrorNG/MirrorNG/issues/1270)) ([8899d20](8899d20))
* ArraySegment<byte> work in Messages ([#919](#919)) ([981ba7c](981ba7c))
* Call hooks when initializing objects OnStartServer on host ([#1249](https://github.com/MirrorNG/MirrorNG/issues/1249)) ([7aa7815](7aa7815))
* call Obsoleted OnStartClient ([#681](#681)) ([8dea50e](8dea50e))
* call OnStartClient only once in room ([#1264](https://github.com/MirrorNG/MirrorNG/issues/1264)) ([4d373c5](4d373c5))
* check event prefix ([7417b68](7417b68))
* ClientRpc methods now work accross assemblies ([#1129](#1129)) ([13dbcb9](13dbcb9)), closes [#1128](#1128)
* Cmds can be called from child classes in other assemblies ([d8a98d8](d8a98d8)), closes [#1108](#1108)
* code generation works with il2cpp again ([#1056](#1056)) ([8738562](8738562))
* destroy owned objects ([#1352](https://github.com/MirrorNG/MirrorNG/issues/1352)) ([d7a58d2](d7a58d2)), closes [#1346](https://github.com/MirrorNG/MirrorNG/issues/1346) [#1206](https://github.com/MirrorNG/MirrorNG/issues/1206) [#1351](https://github.com/MirrorNG/MirrorNG/issues/1351)
* do not accumulate changes if there are no observers fixes [#963](#963) ([#964](#964)) ([64a0468](64a0468))
* Do not call InternalAddPlayer twice ([#1246](https://github.com/MirrorNG/MirrorNG/issues/1246)) ([7119dd1](7119dd1))
* don't call hook in host if no change,  fixes [#1142](#1142) ([#1143](#1143)) ([d8ce80f](d8ce80f))
* don't convert null arrays to empty array ([#913](#913)) ([dd758ca](dd758ca))
* Don't disconnect host ([#608](#608)) ([c1707e5](c1707e5))
* Don't give host player authority by default ([#1158](#1158)) ([1fc1ed2](1fc1ed2))
* Don't increment counter in Awake ([#971](#971)) ([45b7118](45b7118))
* Don't set asset id for scene objects ([7e40232](7e40232))
* Don't set framerate in host mode ([4644bc4](4644bc4))
* Don't throw exception getting address ([7df3ce3](7df3ce3))
* don't use obsolete method ([12437ba](12437ba))
* Draw SyncVar label for Unity objects inline  ([#1291](https://github.com/MirrorNG/MirrorNG/issues/1291)) ([a0425e4](a0425e4))
* Dummy file for SyncListStructProcessor.cs ([#798](#798)) ([75e4f15](75e4f15))
* error when there are no network behaviors ([#1303](https://github.com/MirrorNG/MirrorNG/issues/1303)) ([dbe0643](dbe0643))
* error with missing assemblies ([#1052](#1052)) ([00eb23a](00eb23a)), closes [#1051](#1051)
* Fix error scene error message in host mode ([838d4f0](838d4f0))
* hasAuthority is now visible in all overrides ([#1251](https://github.com/MirrorNG/MirrorNG/issues/1251)) ([2f19c7c](2f19c7c)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* hooks in host mode can call each other ([#1017](#1017)) ([f27fd0b](f27fd0b))
* invalid scene id in 2019.1 by ignoring prefabs in NetworkScenePostProcess ([203a823](203a823))
* isClient now reports true onStartServer in host mode ([#1252](https://github.com/MirrorNG/MirrorNG/issues/1252)) ([d00c95b](d00c95b))
* isLocalPlayer is true during OnStartClient for Player ([#1255](https://github.com/MirrorNG/MirrorNG/issues/1255)) ([fb26d00](fb26d00)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* isLocalPlayer works in host mode onStartServer ([#1253](https://github.com/MirrorNG/MirrorNG/issues/1253)) ([9acde20](9acde20)), closes [#1250](https://github.com/MirrorNG/MirrorNG/issues/1250)
* it is not safe to modify this outside this class ([bc7a961](bc7a961))
* list server logs properly when disconnected ([f02d317](f02d317))
* ListServer Ping not found in WebGL ([6c4b34b](6c4b34b))
* Lobby Remove button not showing for P1 when Server Only ([377c47c](377c47c))
* maintain Unity's copyright notice ([#961](#961)) ([7718955](7718955))
* Make assembly definition 2018.4 compatible ([99ecc9e](99ecc9e))
* make build pass ([08df6d0](08df6d0))
* Mark weaver as failed if serializing invalid type ([03c767d](03c767d))
* missed ushort reader/writer ([74faf2a](74faf2a))
* Mono.CecilX namespace to work around Unity 2019 Cecil namespace collision ([#832](#832)) ([5262592](5262592))
* move listserver classes into package ([2668b17](2668b17))
* move NetworkStreamExtension in a namespace ([12de543](12de543))
* MultiplexTransport GetMaxMessageSize NullReferenceException when called on server. And fixes potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes. ([#1332](https://github.com/MirrorNG/MirrorNG/issues/1332)) ([b3127be](b3127be))
* NetworkBehaviourInspector wouldn't show SyncMode if syncvars / syncobjects were only private ([ed572da](ed572da))
* NetworkClient.Shutdown calls ClientScene.Shutdown again to properly clean up client scene. ClientScene only cleans up itself without touching transport or NetworkIdentities (fixes the bug where the player object wouldn't be destroyed after calling StopClient) ([fb716df](fb716df))
* NetworkManager OnValidate wouldn't properly save the automatically added Transport before because Undo.RecordObject is needed for that now. ([524abfc](524abfc))
* NetworkTransform clientAuthority works again via clientAuthority option that is configurable in inspector. this had to be fixed after we removed local authority. ([d712cd0](d712cd0))
* non ready connections should not observe objects ([1352334](1352334))
* null reference exception ([7ce95c5](7ce95c5))
* OnClientReady is called and passed the appropriate ready state value in NetworkLobbyPlayer ([#618](#618)) ([c9eac57](c9eac57))
* OnSetHostVisibility can now check if it has authority ([888e46c](888e46c))
* pack works if message is boxed ([55c9bb6](55c9bb6))
* Pass the name of the invoking class and desired command when an object has no authority. ([#1216](https://github.com/MirrorNG/MirrorNG/issues/1216)) ([701f4f4](701f4f4))
* Potential DOS attack by sending invalid UTF8 byte sequences  ([#727](#727)) ([3cee3ab](3cee3ab))
* Potential DOS attack on server by sending packed ulongs when packed uints are expected. ([#730](#730)) ([015d0d5](015d0d5))
* potential exploits / out of sync issues where clients with different transports might see different game states because of different max message sizes when using FallbackTransport. ([#1331](https://github.com/MirrorNG/MirrorNG/issues/1331)) ([5449840](5449840))
* potential null reference exception with debug logging ([33493a0](33493a0))
* Prevent Compiler Paradox ([#1145](#1145)) ([fd43c67](fd43c67))
* properly stop client and server in OnApplicationQuit so that clients still get a chance to send then 'quit' packet instead of just timing out. Also fixes a bug where OnStopServer/OnStopClient were not called when stopping the Editor. ([#936](#936)) ([d6389e6](d6389e6))
* Rebuild observers when we switch scenes, fixes [#978](#978) ([#1016](#1016)) ([6dd1350](6dd1350))
* reduce allocations at the transport ([80e4f17](80e4f17))
* release unitypackage ([#1355](https://github.com/MirrorNG/MirrorNG/issues/1355)) ([d0cc669](d0cc669))
* remove samples from upm package ([#25](#25)) ([a71e21f](a71e21f))
* replace player (remove authority by default) ([#1261](https://github.com/MirrorNG/MirrorNG/issues/1261)) ([ad724fe](ad724fe)), closes [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257) [#1257](https://github.com/MirrorNG/MirrorNG/issues/1257)
* ReplacePlayer now calls OnStartLocalPlayer ([#1280](https://github.com/MirrorNG/MirrorNG/issues/1280)) ([0e1bc81](0e1bc81)), closes [#962](#962)
* replacing the player does not mean giving up authority ([#1254](https://github.com/MirrorNG/MirrorNG/issues/1254)) ([a2c273e](a2c273e))
* Respect Player Prefab Position & Rotation ([#825](#825)) ([8ebda0f](8ebda0f))
* Revert "NetworkClient.Shutdown: call ClientScene.Shutdown, otherwise it's never called" - caused client's player to not be removed from scene after disconnecting ([13bb748](13bb748))
* Revert "NetworkIdentity.observers dictionary is always created, but always empty on clients. Gets rid of all null checks." to fix server-only bug not allowing movement on client, e.g. in uMMORPG ([f56507f](f56507f))
* Revert "refactor:  consolidate prefab and spawn handlers ([#817](#817))" to fix a bug where if editor=host, build=client, we receive scene object not found when walking out of and back into an observer's range ([1f07af0](1f07af0))
* Round Robin Spawning by Hierarchy Order ([#790](#790)) ([531e202](531e202)), closes [#724](#724)
* SceneId was not set to 0 for prefab variants ([#976](#976)) ([#977](#977)) ([2ca2c48](2ca2c48))
* set authority when replacing the player ([2195fee](2195fee))
* Set syncvar variables after calling the hook ([#659](#659)) ([2d63ee1](2d63ee1))
* set version number ([#1338](https://github.com/MirrorNG/MirrorNG/issues/1338)) ([0d1d7b5](0d1d7b5))
* spawnwithauthority works again in host mode ([5b04836](5b04836))
* Stop calling ClientDisconnect on host ([#597](#597)) ([b67b3e4](b67b3e4))
* suppress warning on standalone build [#1053](#1053) ([4ef680a](4ef680a))
* Suspend server transport while changing scenes ([#1169](#1169)) ([e8fac8a](e8fac8a))
* Sync full netAnimator for new clients, fix [#980](#980) ([#1110](#1110)) ([db8310f](db8310f))
* syncvars in commands work again ([#1131](#1131)) ([c24a73f](c24a73f))
* TargetRpc now works accross assemblies ([#1130](#1130)) ([5ecd646](5ecd646)), closes [#1128](#1128)
* Telepathy already supports IPv6, but can no also connect to IPv4-only servers again (e.g. Mirror Booster) ([488446a](488446a))
* Telepathy fix a bug where calling Disconnect while connecting to a dead end would freeze Unity because .Join would wait forever. Interrupt fixes it. ([3831cbd](3831cbd))
* Telepathy forgot to set socket options for accepted clients on the server ([22931fc](22931fc))
* Telepathy updated to latest version (IPv6 fix again) ([535b4d4](535b4d4))
* Telepathy updated to latest version (Send SocketExceptions now disconnect the player too) ([98d3fb0](98d3fb0))
* Telepathy updated to latest version: Correctly support IPv4 and IPv6 sockets ([2761ff2](2761ff2))
* Telepathy updated to latest version. connectionId counter is properly reset after stopping server. ([abf06df](abf06df))
* TelepathyTransport.ToString UWP exception ([8a190bf](8a190bf))
* Updated Telepathy to latest version to fix IPAddress.Parse error for "localhost" ([cc6e4f6](cc6e4f6))
* version file ([#1337](https://github.com/MirrorNG/MirrorNG/issues/1337)) ([ed7e509](ed7e509))
* webgl build fix [#1136](#1136) ([#1137](#1137)) ([c85d0df](c85d0df))
* when modifying a prefab, Unity calls OnValidate for all scene objects based on that prefab, which caused Mirror to reset the sceneId because we only checked if a prefab is currently edited, not if THIS prefab is currently edited ([db99dd7](db99dd7))
* **serialization:** Added NetworkWriter tests, found and fixed a bug in Write(Ray). ([#769](#769)) ([99c8f5c](99c8f5c))
* **tests:** Added missing SyncListByteValid test file ([#634](#634)) ([b0af876](b0af876))
* **weaver:** [#696](#696) detect .mystruct = new MyStruct() changes with syncvars ([#702](#702)) ([053949b](053949b))
* **weaver:** fix [#706](#706) find system dlls ([#729](#729)) ([53be9b6](53be9b6))
* **weaver:** fix [#796](#796), reload assemblies after initial import ([#1106](#1106)) ([d91b387](d91b387))
* **websocket:** [#829](#829) fix InvalidOperationException with wss:// ([#830](#830)) ([2d682b5](2d682b5))
* **websocket:** Remove send queues (they never worked) and SSL (temporarily) ([#879](#879)) ([3c60b08](3c60b08))
* **websocket:** Use a buffer for most WS messages in WebGL client resulting in 0 alloc for most messages ([#848](#848)) ([8967a20](8967a20))
* Telepathy updated to latest version: protect against allocation attacks via MaxMessageSize. Can be configured in the TelepathyTransport component now. ([67d715f](67d715f))
* update NetworkIdentityEditor FindProperty to renamed variables ([a2cc14b](a2cc14b))
* weaver Cmd/Rpc/Target prefix check is no longer trash ([#707](#707)) ([699a261](699a261))
* workaround for [#791](#791) ([5c850aa](5c850aa))

### Features

* [#869](#869) support structs in other assemblies ([#1022](#1022)) ([62d1887](62d1887))
* Add roomPlayer parameter to OnRoomServerCreateGamePlayer ([#1317](https://github.com/MirrorNG/MirrorNG/issues/1317)) ([abf5cdc](abf5cdc))
* Add SyncHashSet and SyncSortedSet ([#685](#685)) ([695979e](695979e))
* Add Timeout to NetworkAuthenticator ([#1091](#1091)) ([e8cc9ba](e8cc9ba))
* Add UPM configuration ([#11](#11)) ([9280af1](9280af1))
* Add version to package file ([#1361](https://github.com/MirrorNG/MirrorNG/issues/1361)) ([e97ab93](e97ab93))
* Add weaver support for Vector2Int and Vector3Int ([#646](#646)) ([e2a6ce9](e2a6ce9))
* allow users to detect mirror version 3 ([ee9c737](ee9c737))
* An authenticator that times out other authenticators ([#1211](https://github.com/MirrorNG/MirrorNG/issues/1211)) ([09f6892](09f6892))
* Authentication Framework ([#1057](#1057)) ([56bcb02](56bcb02))
* Chat example ([#1305](https://github.com/MirrorNG/MirrorNG/issues/1305)) ([9926472](9926472))
* component based SyncToOwner, fixes [#39](#39) ([#1023](#1023)) ([c6d86b3](c6d86b3))
* custom reader/writer via extension methods ([#1047](#1047)) ([b45afad](b45afad))
* Custom readers and writers ([92b3e98](92b3e98))
* fallback transport now supports uri ([#1296](https://github.com/MirrorNG/MirrorNG/issues/1296)) ([e4a701e](e4a701e))
* generate serializers for IMessageBase structs ([#1353](https://github.com/MirrorNG/MirrorNG/issues/1353)) ([3c0bc28](3c0bc28))
* Implement IReadOnlyList<T> in SyncLists ([#903](#903)) ([3eaaa77](3eaaa77))
* Include version in release ([#1336](https://github.com/MirrorNG/MirrorNG/issues/1336)) ([e4f89cf](e4f89cf))
* LLAPI transport can receive port from uri ([#1294](https://github.com/MirrorNG/MirrorNG/issues/1294)) ([7865a84](7865a84))
* Mirror now supports message inheritance ([#1286](https://github.com/MirrorNG/MirrorNG/issues/1286)) ([f9d34d5](f9d34d5))
* Multiplex based on url ([#1295](https://github.com/MirrorNG/MirrorNG/issues/1295)) ([c206f9a](c206f9a))
* network writer pool to avoid expensive allocations ([3659acb](3659acb))
* network writer pool to avoid expensive allocations ([#928](#928)) ([f5e9318](f5e9318))
* NetworkConnection is optional for handlers ([#1202](https://github.com/MirrorNG/MirrorNG/issues/1202)) ([bf9eb61](bf9eb61))
* new way to connect using uri ([#1279](https://github.com/MirrorNG/MirrorNG/issues/1279)) ([7c3622c](7c3622c))
* Pass all information to spawn handler ([#1215](https://github.com/MirrorNG/MirrorNG/issues/1215)) ([d741bae](d741bae))
* profiler info is available in production builds ([5649cc6](5649cc6))
* Remove Command shortcut for host mode ([#1168](#1168)) ([94eda38](94eda38))
* safer and consistent writers names ([#979](#979)) ([b4077c1](b4077c1))
* Script Templates ([#1217](https://github.com/MirrorNG/MirrorNG/issues/1217)) ([8cf6a07](8cf6a07))
* Secure messages that require authentication, fixes [#720](#720) ([#1089](#1089)) ([7ac43cd](7ac43cd))
* Semantic release for UPM ([#24](#24)) ([8cbc005](8cbc005))
* ship as a unitypackage ([11edc14](11edc14))
* Show compile time error if overriding unused OnServerAddPlayer ([#682](#682)) ([a8599c1](a8599c1))
* support sending and receiving ArraySegment<byte> ([#898](#898)) ([e5eecbf](e5eecbf))
* support writing and reading array segments ([#918](#918)) ([f9ff443](f9ff443))
* SyncDictionary can now be used for any IDictionary ([#703](#703)) ([2683572](2683572))
* SyncList now supports any IList implementation ([#704](#704)) ([040bcb4](040bcb4))
* SyncList.FindIndex added ([#823](#823)) ([b5ff43a](b5ff43a))
* SyncSet custom Equality Comparer support ([#1147](#1147)) ([0f95185](0f95185))
* SyncToOwner now works with authority ([#1204](https://github.com/MirrorNG/MirrorNG/issues/1204)) ([92d0df7](92d0df7))
* telepathy can now receive port from uri ([#1284](https://github.com/MirrorNG/MirrorNG/issues/1284)) ([06946cf](06946cf))
* Transport can send to multiple connections at once ([#1120](#1120)) ([bc7e116](bc7e116))
* update upm package if tests pass ([#21](#21)) ([7447776](7447776))
* user friendly weaver error ([#896](#896)) ([954a3d5](954a3d5))
* Users may provide custom serializers for any type ([#1153](#1153)) ([9cb309e](9cb309e))
* websocket can receive port in url ([#1287](https://github.com/MirrorNG/MirrorNG/issues/1287)) ([c8ad118](c8ad118))
* Websockets now give client address, fix [#1121](#1121) ([#1125](#1125)) ([c9f317d](c9f317d))
* **scene:** Add support for scene loading params ([#644](#644)) ([d48a375](d48a375))
* **syncvar:** Add SyncDictionary ([#602](#602)) ([7d21bde](7d21bde))
* **telepathy:** Split MaxMessageSize to allow setting a different value for client and server ([#749](#749)) ([f0a8b5d](f0a8b5d))
* **websocket:** Re-enable native SSL ([#965](#965)) ([7ed4a9a](7ed4a9a))

### Performance Improvements

* AddPlayerMessage is now a value type ([246a551](246a551))
* allocation free enumerator for syncsets,  fixes [#1171](#1171) ([#1173](#1173)) ([035e630](035e630))
* allocation free syncdict foreach, fix [#1172](#1172) ([#1174](#1174)) ([1ec8910](1ec8910))
* avoid allocation for error messages ([c669ff1](c669ff1))
* Avoid allocation when reading message payload ([#912](#912)) ([11750a9](11750a9))
* avoid allocation with message structs ([#939](#939)) ([7c7c910](7c7c910))
* avoid boxing for getting message id ([#1144](#1144)) ([9513842](9513842))
* avoid boxing if there is no profiler ([a351879](a351879))
* ClientAuthorityMessage is now a value type ([#991](#991)) ([d071438](d071438))
* Custom IEnumerator for SyncLists to avoid allocations on foreach ([#904](#904)) ([4ffd5a2](4ffd5a2))
* don't varint bytes and shorts ([4867415](4867415))
* eliminate boxing with lists ([#901](#901)) ([8f6d4cb](8f6d4cb))
* eliminate small allocation on remote calls ([#907](#907)) ([1c18743](1c18743))
* eliminate string concat during remote method calls ([#908](#908)) ([70a532b](70a532b))
* empty messages are value types now ([145edaa](145edaa))
* messages should be value types ([#987](#987)) ([633fb19](633fb19))
* MultiplexTransport: avoid Linq allocations that would happen on every packet send because Send calls .ServerActive() each time ([7fe8888](7fe8888))
* Networkreader nonalloc ([#910](#910)) ([18f035d](18f035d))
* objdestroy message is now a value type ([#993](#993)) ([a32c5a9](a32c5a9))
* ObjHideMessage is now a value type ([#992](#992)) ([a49d938](a49d938))
* OnDeserializeSafely without GC ([#804](#804)) ([27b7e25](27b7e25))
* Optimize interest management ([f1ceb0c](f1ceb0c))
* Optimize interest management ([#899](#899)) ([ff1a234](ff1a234))
* Pack small 32 bit negatives efficiently ([480af1a](480af1a))
* Pack small 64 bit negatives efficiently ([5f1ef4a](5f1ef4a))
* Recycle argument writer to avoid allocations ([#945](#945)) ([9743216](9743216))
* Reduce enum bandwidth ([#794](#794)) ([97e9ac2](97e9ac2))
* remove allocations during syncvar sync ([#946](#946)) ([d2381ce](d2381ce))
* remove BinaryWriter,  it allocates like crazy ([#929](#929)) ([7b3e82a](7b3e82a))
* remove network transform allocation ([9e3ecc1](9e3ecc1))
* remove syncvar boxing ([#927](#927)) ([b2ba589](b2ba589))
* return the contents of the writer as an array segment ([#916](#916)) ([ced3690](ced3690))
* reuse the network writer used for rpc parameters ([5dafc4d](5dafc4d))
* rpc messages are now value types ([#997](#997)) ([b5b2f3e](b5b2f3e))
* SceneMessage is now a value type ([#989](#989)) ([407b36a](407b36a))
* spawn with client authority only takes 1 message ([#1206](https://github.com/MirrorNG/MirrorNG/issues/1206)) ([3b9414f](3b9414f))
* SpawnPrefabMessage is now a value type ([a44efd1](a44efd1))
* SpawnSceneObjectMessage is now a value type ([40c7d97](40c7d97))
* Transports now give ArraySegment<byte> instead of byte[] (based on [#569](#569) and [#846](#846)) ([77bee45](77bee45))
* update vars is now a value type ([#990](#990)) ([f99e71e](f99e71e))
* Use 0 for null byte arrays ([#925](#925)) ([21ca49d](21ca49d))
* use 0 for null strings ([#926](#926)) ([7181cd9](7181cd9))
* use bitshift operations instead of division in varint ([fff765c](fff765c))
* Use RemoveAt to remove elements from lists ([22b45f7](22b45f7))
* use value types for empty messages ([#988](#988)) ([81d915e](81d915e))
* Use WritePackedUInt32 in SyncList ([#688](#688)) ([2db7576](2db7576))

* Merge pull request #650 from vis2k/networkclient_static_2 ([fac0542](fac0542)), closes [#650](#650)

### BREAKING CHANGES

* Remove obsolete OnServerAddPlayer

Any person that overrides this method has a broken game.  These methods are never called anywhere.

The user gets a warning because they are overriding an obsolete method,  which might get ignored if they have lots of other warnings.   They would run their game and their game would not work at all.  No errors.

By removing these methods, users that override these methods will get a compile time error instead.  So they cannot ignore this error and they will fix it.

* Method is no longer available in NetworkLobbyManager
* Make NetworkClient Great Again!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants