Git Product home page Git Product logo

ignorance's Introduction

Ignorance 1.4 Logo

Ignorance 1.4 Long Term Support (LTS)

Ko-Fi PayPal GitHub issues GitHub last commit MIT Licensed

I'd appreciate a coffee if you use this transport in your project and you want to help keep my bills paid and lights on.

"Probably the fastest transport out there for Mirror..." - FSE_Vincenzo, 2021 (Mirror Discord)

Ignorance is a high-performance UDP based transport that plugs into Mirror Networking. By harnessing the power of the tried and true ENet native library, it provides reliable and unreliable UDP communications with up to 4096 connected peers (clients) and 255 channels. Reliable UDP has a lot of benefits over TCP which was the default in Mirror until KCP was implemented.

The benefit of Ignorance is that you can utilize channels which allow you to split up network communications. This allows you to have channels for data that are mission critical and must be sent out the door as quickly as possible as well as channels that can send slower non-essential data.

Long Term Support

Ignorance 1.4 is currently in Long Term Support, meaning that no new features are planned. Bug fixes are prioritized and will be addressed when I have free time.

If you have an urgent bug report, then you are encouraged to consider a sponsorship. This will allow me to take time away from my business activities and prioritize the bug report.

Licensing

Ignorance is licensed under MIT license. However, there has been recent cases where other developers have been using the full Ignorance source or parts thereof, stripping the MIT licensing and slapping their own license on it instead.

This falls in violation of the MIT license as it clearly states that copyright notices must remain intact. In short, don't be a code thief and respect the MIT license.

Requirements

  • Mirror, version 66 upwards
  • The minimum version of Unity required is what Mirror requires. I recommend Unity 2020 LTS.
  • Basic knowledge of Unity Engine and Mirror Networking

Ignorance 1.4 LTS will not work with older Mirror versions. You can backport 1.4 LTS to your older Mirror project, but that support is on you.

Installation

Download the Unity Package from Releases that is the latest one. Simply import the Unity Package and Unity will do the rest. Follow the instructions below.

Alternatively you can use the code from the master branch, which is often up to date compared to the releases.

How to use

I have included two pre-configured sample scenes so you can get started easily. One is Pong, one is a copy paste with some modifications of Mirror's Basic scene. Otherwise add the script called Ignorance to your NetworkManager object, removing any TCP-based or other UDP-based transport (ie. kcp2k). Then set the script to be used in NetworkManagers' "Transport" field.

Documentation

See DOCUMENTATION.md.

For Ignorance Standalone, see STANDALONE.md.

For the FAQ (aka Please Read This First), see FAQ.md.

Ignorance with Mirage/et al.

  • Mirage users: Please use the built-in UDP transport that ships with it.
  • FishNet users: Fludity was a hacked up version of Ignorance with its license stripped. It's been replaced with Tugboat.
  • Other network stacks: Ignorance was not designed to be used outside of Mirror.

If you are using your own network stack or you are trying to plumb Ignorance to another networking solution that already exists, you are much better off using the ENet-CSharp wrapper to talk to ENet directly. You could also try Ignorance Standalone which is mentioned above.

Ignorance in Action

  • If you own a copy of Population One, congrats. That game uses Ignorance as its primary network transport layer. It also earns its spot into the first major game that is using Ignorance.

  • Ignorance was used in a "Vinesauce is Hope" walking simulation demo which had multiple server instances running with over 300 CCU each. Video clips available here.

What devices are supported?

IMPORTANT: 32bit Desktop targets are NOT supported. Macintoshes with the M1 (ARM64/AArch64) chip are also not supported. Rosetta may work though.

Supported platforms, out of the box:

  • 64Bit Desktop Platforms (Windows/Mac/Linux), Android (ARMv7/ARM64) including VR devices and iOS (ARMv7/ARM64).

  • If ENet native can run on it and it's supported by Unity, you're good to go with Ignorance.

  • Apple M1 Device Users must recompile ENet Native for their M1 processors. Using Ignorance straight out of the box will result not be able to load the x86_64 library on Apple Silicon. Rosetta may work, but no promises.

Other platforms that require some extra work:

  • Consoles like the Nintendo Switch, PlayStation 4 and PlayStation 5. I do not have development clearance to build the native library for these platforms, so they require additional work to get functioning.

For more info, see the FAQ.

I found a bug, where do I report it?

Check the current open bug reports and/or report a new one here.

Failing that you can always catch me on the Oiran Studio discord or Mirror discord.

Bugs that do not have enough details will be either closed or put as low priority. Details like your OS, Unity Editor version, any Ignorance errors, etc is essential for a good bug report.

I have other questions, I want answers.

Here's a quick primer.. It might be slightly out of date, but it covers the basics of Ignorance.

Credits

  • Donators: Thanks for helping keep the lights on.

  • FSE_Vincenzo: Resident master of the ENet way. They are part of Flying Squirrel Entertainment - go check their games out.

  • JesusLuvsYooh : CCU endurance testing project, ideas, fixes and other awesome stuff

  • Katori: Helped kickstart the threaded version that evolved into short-lived Ignorance 2.x version, which later became Ignorance Threaded.

  • PhantomGamers: Got Mirror + Ignorance working as a BepInEx client-side side-load modification for a game. Holy shit, that's cool.

  • BigBoxVR: Pull requests and found a race condition that threatened stability. Also uses Ignorance in Population One, a VR title.

  • Martin: Pull requests, testing with Dissonance. Great VoIP asset for Unity.

  • c6burns, Petris, shiena, Draknith, nxrighthere, vis2k, Paul

  • The Mirror Discord and the others who I have missed. Thanks a lot, you know who you are.

  • You too can have your name here if you send in a PR. Don't delay, get your PR in today!

To be continued...?

ignorance's People

Contributors

felipejfc avatar gabebigboxvr avatar martindevans avatar michalpetryka avatar narryg avatar noblewhale avatar paulpach avatar phantomgamers avatar shiena avatar softwareguy avatar timpickup avatar vincenz099 avatar voody2506 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ignorance's Issues

iOS 9.3.5 crash

Hi there,

I'm experiencing a crash on iOS 9.3.5 (works perfect on iOS 10 and later versions) with XCode 10.2.1 and Unity 2018.3.11f1.

It crashes when I call Mirror.Ignorance:ClientConnect(String).
That line:
int32_t returnValue = reinterpret_cast<PInvokeFunc>(enet_host_service)(___host0, ___event1, ___timeout2);

in: Native_enet_host_service_m48FBC7FF96DFB99185B042148A1B5F95D6BD9AC6

There is not much details about the error, just:

dyld`dyld_fatal_error:
-> 0x1febf08c <+0>: trap
0x1febf090 <+4>: nop

Any idea where it can come from?

Thanks a lot for your help!

Firebase and Ignorance dependency DLLs cause shit to break

Reported by user in the Mirror Discord

  • Ignorance was working fine before adding Firebase database functionality
  • Works fine in the editor
  • Build game, cannot find enet.dll error
  • Unity looking for the DLL in Mono folder instead of Plugins

Extra info:
I've found that including any of the Firebase native dlls in the project will cause this issue to happen, as soon as I disable them in the standalone enet works fine, but of course Firebase doesn't work now.

Repro project provided? Yes.

Doesn't Work in PlayFab Docker Containers

Here is the same thing reported as the conversation in Discord:

I am struggling to connect IgnoranceThreaded or IgnoranceClassic while running in the PlayFab MockVM Agent locally on my Windows 10. It works just fine with Telepathy Transport.

Here is my MultiplayerSettings.json file when trying to connect with Ignorance

{
    "RunContainer": true,
    "OutputFolder": "D:\\PlayFabMultiPlayerLocalAgent\\0.7.1\\Output",
    "NumHeartBeatsForActivateResponse": 10,
    "NumHeartBeatsForTerminateResponse": 6000,
    "TitleId": "",
    "BuildId": "00000000-0000-0000-0000-000000000000",
    "Region": "WestUs",
    "AgentListeningPort": 56001,
    "ServerStartParameters": {
        "ImageDetails": {
            "Registry": "mcr.microsoft.com",
            "ImageName": "playfab/multiplayer",
            "ImageTag": "wsc-10.0.17134.950",
            "Username": "",
            "Password": ""
        },
        "AssetDetails": [
            {
                "MountPath": "C:\\Assets",
                "SasTokens": null,
                "LocalFilePath": "D:\\PlayFabMultiPlayerLocalAgent\\GameServers\\BlockyBall-Mechanics\\BlockyBall-GameServer-0.0.6.zip"
            }
        ],
        "StartGameCommand": "C:\\Assets\\GameServer.exe",
        "PortMappingsList": [
            [
                {
                    "NodePort": 56100,
                    "GamePort": {
                        "Name": "game_port",
                        "Number": 3600,
                        "Protocol": "UDP"
                    }
                }
            ]
        ]
    },
    "SessionConfig": {
        "SessionId": "ba67d671-512a-4e7d-a38c-2329ce181946",
        "SessionCookie": null,
        "InitialPlayers": [ "Player1", "Player2" ]
    }
}

And here is the setup in Unity:

image

And this is how I assign the port:

public virtual ushort Port
{
    get
    {
        ushort invalidValue = 0;

        switch (transport)
        {
            case IgnoranceClassic ignoranceClassic:
                return (ushort) ignoranceClassic.CommunicationPort;
            case IgnoranceThreaded ignoranceThreaded:
                return (ushort) ignoranceThreaded.CommunicationPort;
            case TelepathyTransport telepathyTransport:
                return telepathyTransport.port;
        }

        Debug.LogError($"There is not a supported transport attached to this {GetType().Name}", this);
        return invalidValue;
    }
    protected set
    {
        switch (transport)
        {
            case IgnoranceClassic ignoranceClassic:
                ignoranceClassic.CommunicationPort = value;
                return;
            case IgnoranceThreaded ignoranceThreaded:
                ignoranceThreaded.CommunicationPort = value;
                return;
            case TelepathyTransport telepathyTransport:
                telepathyTransport.port = value;
                return;
        }

        Debug.LogError($"There is not a supported transport attached to this {GetType().Name}", this);
    }
}

I'm at a loss here as to why I can't connect locally in the Docker Container with the Mock VM Agent. Telepathy works just fine over TCP but Ignorance does not. I've opened up the ports and communication on my firewall for both TCP and UDP but still no luck. Even with those ports not opened on my firewall, communication still works just fine locally over TCP so that is not the issue. Any help would be extremely appreciated.

Here is the docs for the PlayFab Docker Container: https://docs.microsoft.com/en-us/gaming/playfab/features/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab

Don't Spam Disconnecting Connection for Inactivity

When a clients get dropped due to inactivity, please log only once, don't spam over and over again please!

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Several tips

(A note for the end-user: don't use this bad abstraction of the ENet in any of your projects, especially if you are creating a non-hobby stuff)

  1. Don't allocate buffers dynamically on the heap here and here. If arrays are not moving across threads, then allocate them once like this and reuse all the time. You need to expose API to provide the actual length of the payload since you need to allocate large buffers. If arrays are moving across threads, use ArrayPool from NetStack or System.Buffers from NuGet, the implementation is almost the same.

  2. You are currently dispatching one event per frame which will lead to such issues. Read my last comment there.

  3. You should separate channels and delivery types as it was designed originally, right now you force head-of-line blocking which is counter-productive when you use multiplexed UDP transport.

  4. You should include .meta files for native libraries and explicitly assign each to appropriate platforms and CPU architectures, especially for Android.

Feature: LAN Discovery

Research and implement a way to do LAN Discovery, so Ignorance can search the local network for any other game servers running using Ignorance.

Implementation to be determined.

Ignorance does not respect Transport.enabled if the transport was disabled by another message within the same frame

Continuing my trend of reporting the same issue in every single transport...

Certain code in Mirror (specifically the scene load code) is dependent on pausing the transport on the client/server to ensure messages don't get sent out of order. As such, there are two checks within Telepathy.

            // note: we need to check enabled in case we set it to false
            // when LateUpdate already started.
            // (https://github.com/vis2k/Mirror/pull/379)
            if (!enabled)
                return;

            // process a maximum amount of client messages per tick
            for (int i = 0; i < clientMaxReceivesPerTick; ++i)
            {
                // stop when there is no more message
                if (!ProcessClientMessage())
                {
                    break;
                }

                // Some messages can disable transport
                // If this is disabled stop processing message in queue
                if (!enabled)
                {
                    break;
                }
            }

In Ignorance, only the first check is in place
https://github.com/SoftwareGuy/Ignorance/blob/master/Assets/Mirror/Runtime/Transport/Ignorance/IgnoranceThreaded.cs#L122
The second check is nowhere to be found.

This is most likely the cause of #58 as well.

Don't Spam Disconnecting Connection for Inactivity

When a clients get dropped due to inactivity, please log only once, don't spam over and over again please!

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

Disconnecting connection(19) for inactivity! 
(Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

DLL not found in macOS

I'm experiencing same problem as #3. When I run demo scene and press "LAN Host" I get an error:

DllNotFoundException: enet
ENet.Library.Initialize () (at Assets/Mirror/Runtime/Transport/Ignorance/Dependencies/ENet.cs:1059)
Mirror.IgnoranceClassic.InitializeENET () (at Assets/Mirror/Runtime/Transport/Ignorance/IgnoranceClassic.cs:376)
Mirror.IgnoranceClassic.ServerStart () (at Assets/Mirror/Runtime/Transport/Ignorance/IgnoranceClassic.cs:262)
Mirror.NetworkServer.Listen (System.Int32 maxConns) (at Assets/Mirror/Runtime/NetworkServer.cs:136)
Mirror.NetworkManager.StartServer () (at Assets/Mirror/Runtime/NetworkManager.cs:288)
Mirror.NetworkManager.StartHost () (at Assets/Mirror/Runtime/NetworkManager.cs:363)
Mirror.NetworkManagerHUD.OnGUI () (at Assets/Mirror/Runtime/NetworkManagerHUD.cs:55)

Steps to reproduce:

  1. Create empty Unity project (Unity 2019.2.2f)
  2. Import Mirror asset pack (v3.20.0)
  3. Import Ignorance asset pack (v1.3.3)
  4. Run IgnoranceClassic_BasicScene or any other Ignorance demo scene
  5. Hit "LAN Host" button

Environment:
macOS 10.14.4
Build target platform is PC, Mac & Linux Standalone

Build Settings Screen Shot 2019-09-29 at 1 41 01 PM

Run-away client receive loops (Not shutting down when required)

EDIT: This is only applicable to the mirror2018 branch. master seems to not have this issue.

If one spams the NetworkManagerHUD's "LAN Client" to connect to a Ignorance-powered server, most of the time it will connect and start pumping data correctly. However, if one is fast enough to click "Cancel", then the actual loop that does the data pumping isn't aborted while it is in the Connecting state for some reason (OnClientDisconnect callback doesn't seem to be called). Thus, if you do get a connection, you can end up with 2 connections sending/receiving data on the client instance.

Originally thought to be an ENET problem, it seems that it could be either ENET, something in Mirror (i'm guessing it is likely to be that) or Unity's handing of some functionality. I am not sure. This can be classified as a game-breaking issue if you just have bad luck.

References
Issue #39 on ENET-C#, https://github.com/nxrighthere/ENet-CSharp/issues/39

Mac Editor Server <-> Mac Editor Client communication failures

Unity version 2018.2.20.

It seems that if you try to connect a Unity Editor that is in client mode to another Unity Editor instance that is in Host mode on the same computer (127.0.0.1/localhost) then the Unity Editor in client mode will not be able to connect to the localhost server counterpart.

Originally reported by Miles Every on the Discord. Confirmed that the bug exists by testing and can replicate the issue locally on my MacBook Pro.

Reproducible using the project (download it here). Open two Unity Editors with the project (you might need to make two copies of the project, since you can't have two editors open on the same project files). On one editor of the project, open the Pong scene, click "LAN Host". On the other editor, open the same scene and choose "LAN Client". This will attempt to connect to localhost... and should fail. The Peer object while it's in this state is stuck on "Connecting".

Does not seem to happen if you connect to a Windows Editor instance from the Mac Editor as a client. Windows Editor to Windows Editor instances are literally bullet-proof.

maxConnections in ENET is not the same as Mirror

Seems that ENET's maximum connections is how many connection slots that will be used by the server. Connecting and then disconnecting clicks down the remaining slots.

ie. 4 slots = 4 connection capacity, no more after that. Not "I can run 4 connections at the same time".

For example, using Mirror's example pong scene and connecting to the same server more than 4 times will cause the transport to be dumped back to the unconnected state.

Will need a work around. Maybe need to poke upstream to ensure my facts are right

Unrealable udp

Hi. I have a question regarding the Channels list inside Ignorance script parameters.
Is there a specific reason why the minimum number of channels is 2 and it's not possible to choose unrealable only channel?

My project use case is local ethernet network only, so (assuming there won't be any packet loss) I would like to try to achieve minimum latency possible with unrealable udp connection (preserving packets order would be nice though)

Client cannot connect

Hello i tried switching to Ignorance but it does not connect to the server ( timeout ).

Tried binding server to 127.0.0.1 and local network ip ( 192.168.2.10 )

And tried connecting to: localhost, 127.0.0.1, 192.168.2.10

I also disabled windows firewall just in case.

Nothing is working ๐Ÿ‘Ž

lXKhBIk 1

NetworkManager references

Would it be possible to remove the references into NetworkManager? That would allow seamless integration with Insight.

Doesn't work with Mirror 42.2.12

Hello.

In the readme you say that we should use the Mirror version that is on the asset store.
on the 06/08/2021 the version on the asset store is Mirror 42.2.12
I have imported Mirror 42.2.12 in a Unity 2019.4.24f1 empty project
I have imported Ignorance-v140b6.1-20210614.unitypackage
and this is what happen :

image

Packet Encryption

Hello @SoftwareGuy !

I was looking into using Ignorance for a project, and was wondering if you have any future plans for implementing some form of optional UDP encryption such as DTLS or an alternative.

Im not fully sure if this is something which would be implemented in Ignorance itself, or in the ENet side of things but I can see it being a useful adition in some scenarios.

uSurvival doesn't like Ignorance

No idea why this would happen, but adding it here on the to-do list for analysis and bug spray.

Check why Ignorance won't work with uSurvival.

libenet.bundle cannot be found under macOS?

I used the ignorance library under macOS, but it reported an error

Unhandled exception. System.DllNotFoundException: Unable to load shared library 'enet' or one of its dependencies. In order to help diagnose loading problems, consider setting the DYLD_PRINT_LIBRARIES environment variable: dlopen(libenet, 1): image not found
at ENet.Native.enet_initialize()

Environment:
macOS 10.14.5
dotnet3.1 console

I'm using libenet.bundle, I also use xlua, but xlua is dylib format, no problem, please advise how to solve it?
Or how do you convert a bundle to dylib?

Error no GetConectionInfo virtual method in Transport class?

Just got the latest versions of Mirror and Ignorance but when I bring ignorance in I get the error:
Assets\Mirror\Transports\Ignorance\IgnoranceTransport.cs(225,30): error CS0115: 'IgnoranceTransport.GetConnectionInfo(int, out string)': no suitable method found to override

Updates going forward

Hello. I wondered if you are still updating Ignorance? I just upgraded to Mirror 53 and hit an error. It works ok with Mirror 44.0.2 (I'm using Unity 2021.1.25f1)
If you are still able to help I'll send you the error. I just wound back and didn't save it!
Many thanks
Mark

m_UseCustomTimeout == true causes InvalidOperationException: Peer not created

Using RC6 Release

Steps to Repro
Connect to server with m_UseCustomTimeout == true.
Verify Exception Below

  at ENet.Peer.CheckCreated () [0x00012] in <8a2536f04ef94eda827da077b88dbd43>:0 
  at ENet.Peer.Timeout (System.UInt32 timeoutLimit, System.UInt32 timeoutMinimum, System.UInt32 timeoutMaximum) [0x00000] in <8a2536f04ef94eda827da077b88dbd43>:0 
  at Mirror.IgnoranceTransport.ClientConnect (System.String address) [0x000a7] in <8a2536f04ef94eda827da077b88dbd43>:0 
  at Mirror.NetworkClient.Connect (System.String serverIp) [0x0002d] in <5044f1c98de548f98a5ad5f614525ee5>:0 
  at Mirror.NetworkManager.StartClient () [0x00067] in <5044f1c98de548f98a5ad5f614525ee5>:0 
  at NetworkingHost.Connect (System.String address, System.Int32 port) [0x00057] in <8a2536f04ef94eda827da077b88dbd43>:0 
  at NetworkingHost.OnSceneChanged (UnityEngine.SceneManagement.Scene oldScene, UnityEngine.SceneManagement.Scene newScene) [0x00037] in <8a2536f04ef94eda827da077b88dbd43>:0 
  at (wrapper delegate-invoke) UnityEngine.Events.UnityAction`2[UnityEngine.SceneManagement.Scene,UnityEngine.SceneManagement.Scene].invoke_void_T0_T1(UnityEngine.SceneManagement.Scene,UnityEngine.SceneManagement.Scene)
  at UnityEngine.SceneManagement.SceneManager.Internal_ActiveSceneChanged (UnityEngine.SceneManagement.Scene previousActiveScene, UnityEngine.SceneManagement.Scene newActiveScene) [0x0000c] in <945c24c342914372bc599495ca1ade0d>:0 

using unity assetstore version and new ignorance verson show errors

Assets\Mirror\Transports\Ignorance\IgnoranceTransport.cs(992,32): error CS0115: 'IgnoranceTransport.ServerGetClientAddress(int)': no suitable method found to override

Assets\Mirror\Transports\Ignorance\IgnoranceTransport.cs(30,18): error CS0534: 'IgnoranceTransport' does not implement inherited abstract member 'Transport.GetConnectionInfo(int, out string)'

Can you consider giving priority to the stable version of mirror? thank

Mac Silicon, game console, and additional platform support

I mentioned something I am trying out over here in this issue:

SoftwareGuy/ENet-CSharp#41
SoftwareGuy/ENet-CSharp#41 (comment)

I'm just opening an issue to track it here as well as it is specifically Ignorance that I am using to test it with. Quote of comment here for ease of reading:

@SoftwareGuy I was doing some digging around on this as I'm also in need of Mac and hopefully soon PlayStation, XBox, and Switch support. I found this:

https://docs.unity3d.com/Manual/PluginInspector.html

And this:

https://forum.unity.com/threads/how-to-setup-this-windows-player-c-source-code-plugins-for-il2cpp.537269/

Reading through it, it sounds like Unity supports including native C code in your project and it will compile it in the il2cpp build process. It won't work in mono builds or Editor (because of mono).

I'll try it out with enet and if it works, it should make it so enet supports all platforms unity compiles il2cpp with (which I think is all of them).

I'll keep this issue updated with my findings and put in a PR for review if it works on my local.

Platform specific Enet / libenet

changing my platform to Mac while on a windows machine. It's trying to load libenet when it should be loading Enet.

Thanks :)

Invalid Address Exception

When running in an offline server where it connects to itself in order to allow network objects to work, we disconnect and reconnect to a new server, however the ENet plugin crashes due to some sort of invalid pointer address.

Is there a version that has symbols that we can use to debug the exact problem?

Thanks!

0x00000000653A149F (enet) enet_linked_version
0x00000000653A1CC8 (enet) enet_peer_receive
0x00000000653A49FF (enet) enet_peer_disconnect_now
0x0000029DA06DA8CD (Mono JIT Code) (wrapper managed-to-native) ENet.Native:enet_peer_disconnect_now (intptr,uint)
0x0000029DA06DA82B (Mono JIT Code) ENet.Peer:DisconnectNow (uint)
0x0000029DA0694B6B (Mono JIT Code) Mirror.IgnoranceTransport:ClientDisconnect ()
0x0000029DA06949D0 (Mono JIT Code) Mirror.NetworkConnection:Disconnect ()
0x0000029DA06948A3 (Mono JIT Code) Mirror.NetworkServer:DisconnectAllConnections ()
0x0000029DA069474B (Mono JIT Code) Mirror.NetworkServer:DisconnectAll ()
0x0000029DA069445B (Mono JIT Code) Mirror.NetworkServer:Shutdown ()
0x0000029DA069435B (Mono JIT Code) Mirror.NetworkManager:StopServer ()
0x0000029DA069425B (Mono JIT Code) Mirror.NetworkManager:StopHost ()
0x0000029DA06941DB (Mono JIT Code) NetworkingHost:ConnectToServerOnSceneChange (ServerDiscoveryRecord)
0x0000029DA0694093 (Mono JIT Code) TestRoomShuttle:Connect ()
0x0000029DF84C6AD0 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
0x00007FF8A17DBE4B (mono-2.0-bdwgc) mono_get_runtime_build_info
0x00007FF8A1761E32 (mono-2.0-bdwgc) mono_perfcounters_init
0x00007FF8A176AE3F (mono-2.0-bdwgc) mono_runtime_invoke
0x00007FF887B15C64 (UnityPlayer) scripting_method_invoke
0x00007FF887B13490 (UnityPlayer) ScriptingInvocation::Invoke
0x00007FF887B1354E (UnityPlayer) ScriptingInvocation::InvokeChecked
0x00007FF887AFFD76 (UnityPlayer) MonoBehaviour::CallMethodInactive
0x00007FF887AFFCC8 (UnityPlayer) MonoBehaviour::CallMethodInactive
0x00007FF887B10DF5 (UnityPlayer) ForwardInvokeDelayed
0x00007FF8878F4FB2 (UnityPlayer) DelayedCallManager::Update
0x00007FF887A205F7 (UnityPlayer) ExecutePlayerLoop
0x00007FF887A20699 (UnityPlayer) ExecutePlayerLoop
0x00007FF887A2261F (UnityPlayer) PlayerLoop
0x00007FF8877FBD25 (UnityPlayer) PerformMainLoop
0x00007FF8877FA66A (UnityPlayer) MainMessageLoop
0x00007FF8877FF0EA (UnityPlayer) UnityMainImpl
0x00007FF88780320B (UnityPlayer) UnityMain
0x00007FF7074A11FA (PopulationONE) __scrt_common_main_seh
0x00007FF8EB4E3034 (KERNEL32) BaseThreadInitThunk
0x00007FF8EC7D3691 (ntdll) RtlUserThreadStart

========== END OF STACKTRACE ===========

Calling networkConnection.Disconnect() has no effect

Describe the bug
networkConnection.Disconnect() calls have no effect. Using the debugger revealed that connection is still present in NetworkServer.connections after Disconnect is called. I have used basic authentication component to demonstrate it, since this is how I discovered it and it is among the faster ways to set up, but this error is not limited to it. This happens on both client & server. Switching to Telepathy makes everything run smooth. NetworkManager OnServerDisconnect event is also not fired, since no actual disconnect carries out. With enabled debug both on server & client a log message is printed

Ignorance: Client disconnection acknowledged

Repro project

  • Create empty project in Unity.
  • Import Mirror.
  • Import Ignorance (Last release QualityOfLife-136-20200130).
  • Open Ignorance Threaded example scene.
  • Add Basic Authenticator component and drag it into Network Manager

To Reproduce
Steps to reproduce the behavior:

  1. Build Player for Windows x86_64 with Mono backend
  2. Open 2 instances of the player (One in editor to change password from inspector, one in standalone player)
  3. Launch Host/Server on one instance
  4. Connect to first instance from the second with incorrect credentials.

Expected behavior
Client disconnected from server.

Actual behavior
Client is stuck in the middle of the connection procedure.

Desktop

  • OS: Windows 8.1 x64
  • Build target: Windows x86_64 Mono
  • Unity version: 2019.2.14f1, 2020.1.0b5
  • Mirror branch: 11.4.2, 12.11.0

iOS Server doesn't work

The server doesn't work on iOS (no matter the version) with Unity 2018.3.11f1 and XCode 10.2.1.

If I run the Mirror example Basic, click LAN Server Only then try to connect from another device, nothing happens.
It works fine when I do the exact same thing with an Android device or with Unity Editor.

Increase limit beyond 4096 connected peers

What is the current reason for limiting to 4096 connected peers? And what modifications would be needed in order to increase past this limit?

We've been running some optimizations to Blocky Ball so that we are ready for the game to scale when we launch mobile. We've set up session based matches so one running game server executable handles multiple matches between different players. We are looking to be approaching this 4096 connected peer limitation.

Thanks again for all of the hard work on Ignorance! :)

Player crash on second server client connection

Describe the bug
Player crashes after client connects in the second host instance with Ignorance Threaded. Switching to Telepathy makes program run normally. This issue only happens if server is terminated with clients still on, if server is empty is operates normally (local client in host mode does not count). This issue happens both in Host and Server only modes.

from error.log

enet.dll caused an Access Violation (0xc0000005)
in module enet.dll at 0033:0aa5399e.

Stack Trace of Crashed Thread 6280:
0x00007FF80AA5399E (enet) enet_peer_send
0x00000059125D6FB6 (Mirror) ENet.Native.enet_peer_send()
0x00000059125D6EF3 (Mirror) ENet.Peer.SendAndReturnStatusCode()
0x0000005912581B2B (Mirror) Mirror.IgnoranceThreaded.ServerWorkerThread()
...

Repro project

  • Create empty project in Unity (I have checked and this bug is present in 2019.2.14f1 and 2020.1.0b5).
  • Import Mirror (Tested asset store version 11.4.2 and latest release 12.11.0)
  • Import Ignorance (Last release QualityOfLife-136-20200130)
  • Open Ignorance Threaded example scene

To Reproduce
Steps to reproduce the behavior:

  1. Build Player for Windows x86_64 with Mono backend
  2. Open 2 instances of the player
  3. Launch Host/Server on first instance
  4. Connect to first instance from the second.
  5. Stop Host/Server on first instance
  6. Launch Host/Server on first instance
  7. Connect to first instance from second.

Expected behavior
First instance successfully accepts connection.

Actual behavior
First instances crashes.

Desktop

  • OS: Windows 8.1 x64
  • Build target: Windows x86_64 Mono
  • Unity version: 2019.2.14f1, 2020.1.0b5
  • Mirror branch: 11.4.2, 12.11.0

Additional context
Error log: https://pastebin.com/9gEZuHVb
Player log: https://pastebin.com/HedR6jLK
Crash dump: https://www.dropbox.com/s/v6c8bt0ob29zjyq/crash_2020-04-28_213157180.zip?dl=1

Android hosting being problematic

It seems that some Android devices block LAN Host mode on Android with Ignorance/Telepathy/et al with Mirror, but work with deprecated Unity UNET.

Investigate why this happens. Ignorance 1.3 works fine with an Android OS LAN Host and the Unity 2018.4 Editor connecting to the device itself. Maybe Ignorance 1.2.6/1.2.7 has a bug?

UnityAsync Error

Hi,

I upgraded my project to 2018.2.20f1 then dropped Mirror(2018) and Ignorance (2018 latest release) in the project, I also changed Scripting Runtime Version to .NET 4.x Equivalent.

I am currently stuck with the error below

Assets/IgnoranceTransport/Dependencies/UnityAsync/TaskYieldInstruction.cs(21,45): error CS1061: Type Task' does not contain a definition for IsCompleted' and no extension method IsCompleted' of type Task' could be found. Are you missing an assembly reference?

The port not be closed

Version 1.3.0 gold release. Unity 2018.4.5
I started host for several times in editor. And stop then run again. Throw the exception: Host creation call failed.
I used the cmd to check the ports. The editor is still using that port after stop run. I don't know if it will cause the problem on other platform.
So if it's possible to stop the port after running?

Spawn Scene Objects

I am trying to use Ignorance instead of Telepathy, because we use Dissonance Voice Chat and they advise against using a TCP Transport, but I have run into a problem with spawning scene objects. There are two Functions in Mirror.ClientScene: PrepareToSpawnSceneObjects() and SpawnSceneObject(SpawnMessage). The former has to be called before the latter, but when I use Ignorance (Classic or Threaded), they are not always in the correct order, presumably because of the unreliability of UDP (the ObjectSpawnStartedMessage arrives before the SpawnMessage). This happens only on the client and only sporadically.

Is there a way to fix this or ca I just not use Ignorance/UDP?

a few suggestions

posting them all in one place for now.

image
weird indentation


image
weird indentation. also the 'costs?' is kinda weird. if you don't exactly know what it does then feel free to leave compression out of it for now. having an uncompressed enet transport is valuable already.


image
whitespace


image
remove this


image
personally I wouldn't worry about buffering until ignorance is 1000% stable. telepathy doesn't buffer (yet) either.


image
use dictionary.TryGetValue instead of containskey+lookup. faster and shorter.


image
use trygetvalue


processservermessage:
image
copy exactly the received packet into a byte[] and then call onserverdatareceived.invoke with the exact packet that was received. don't copy the whole packetdatabuffer in there.
not sure if you have to call incomingevent.packet.dispose either. C# will probably do that for you. unless there is a enet-sharp thing that require you to do that.


image
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2.remove?view=netframework-4.7.2 just remove, no need to check containskey first.

image
this allocates a new arraysegment each time someone uses any mirror function with ignorance. probably better to go back to your old serversend without arraysegment. and if you still want arraysegment support then have another serversend function that does that.


image
trygetvalue


image
are you sure this works if I am on linux and build for osx? maybe this requires application.platform==osx check? (not 100% sure)


image
copy directly into a byte[] with exactly the size that you need here too. less magic for now, stability is important, especially if you still have random errors in places.


image
allocates a new arraysegment each time someone calls it from mirror. see above.


image
usually better to do this with a git branch instead. but it's fine as long as you remove the old functions later.


image
is this even needed if you only run ignorance from unity?


image
imho a 'bool logDebug' is enough. people should always see warnings and errors.


image
trygetvalue

image
copy into a byte[] directly like explained above


image
fix indentation

[Ignorance 1.3.9 Prerelease Revision 1] IgnoranceClassic.cs, IgnoranceThreaded.cs errors on import

Versions:

Mirror Version 26.2.2
Ignorance 1.3.9 Prerelease Revision 1
Unity3D 2020.1.12f1
OS: Windows 7 64bit

Issue:

I installed Mirror Version 26.2.2 first; restarted Unity3D, then imported Ignorance and got these 6 errors (and 2 warnings):

Assets\Mirror\Runtime\Transport\Ignorance\IgnoranceClassic.cs(147,30): error CS0508: 'IgnoranceClassic.ClientSend(int, ArraySegment)': return type must be 'void' to match overridden member 'Transport.ClientSend(int, ArraySegment)'

Assets\Mirror\Runtime\Transport\Ignorance\IgnoranceClassic.cs(187,21): warning CS0114: 'IgnoranceClassic.ServerSend(int, int, ArraySegment)' hides inherited member 'Transport.ServerSend(int, int, ArraySegment)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword.

Assets\Mirror\Runtime\Transport\Ignorance\IgnoranceClassic.cs(604,30): error CS0115: 'IgnoranceClassic.ServerSend(List, int, ArraySegment)': no suitable method found to override

Assets\Mirror\Runtime\Transport\Ignorance\IgnoranceClassic.cs(25,18): error CS0534: 'IgnoranceClassic' does not implement inherited abstract member 'Transport.ServerSend(int, int, ArraySegment)'

Assets\Mirror\Runtime\Transport\Ignorance\IgnoranceThreaded.cs(236,30): error CS0508: 'IgnoranceThreaded.ClientSend(int, ArraySegment)': return type must be 'void' to match overridden member 'Transport.ClientSend(int, ArraySegment)'

Assets\Mirror\Runtime\Transport\Ignorance\IgnoranceThreaded.cs(275,21): warning CS0114: 'IgnoranceThreaded.ServerSend(int, int, ArraySegment)' hides inherited member 'Transport.ServerSend(int, int, ArraySegment)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword.

Assets\Mirror\Runtime\Transport\Ignorance\IgnoranceThreaded.cs(788,30): error CS0115: 'IgnoranceThreaded.ServerSend(List, int, ArraySegment)': no suitable method found to override

Assets\Mirror\Runtime\Transport\Ignorance\IgnoranceThreaded.cs(31,18): error CS0534: 'IgnoranceThreaded' does not implement inherited abstract member 'Transport.ServerSend(int, int, ArraySegment)'

iOS Linker error _enet_address_set_hostname and others

Hi,

I am trying to build Mirror Ignorance on iOS however some referenced functions seem to be missing from libenet.a. nm tools show me the functions are missing.
image

However the same functions are missing in the windows .dll and it compiled and ran fine...
image

The missing functions seem to be referenced in ENet.cs but no idea why it works under windows
image

Any ideas, really would like to use UDP with our voice chat : /

SIGSEGV on Android

version

step to reproduce

  • add /Assets/Ignorance/PongChamp.unity to build settings
  • switch to android platform
  • build and run
  • view logcat
02-26 00:41:51.737 17801 17817 I Unity   : Ignorance Transport: If you see this, the server most likely was successfully created and started! (This is good.)
02-26 00:41:51.737 17801 17817 I Unity   :
02-26 00:41:51.737 17801 17817 I Unity   : (Filename: ./Runtime/Export/Debug.bindings.h Line: 45)
02-26 00:41:51.737 17801 17817 I Unity   :
02-26 00:41:51.738 17801 17817 E CRASH   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000010
02-26 00:41:51.738 17801 17817 E CRASH   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
02-26 00:41:51.738 17801 17817 E CRASH   : Build type 'Release', Scripting Backend 'mono', CPU 'armeabi-v7a'
02-26 00:41:51.738 17801 17817 E CRASH   : Build fingerprint: 'google/blueline/blueline:9/PQ2A.190205.001/5163636:user/release-keys'
02-26 00:41:51.738 17801 17817 E CRASH   : Revision: 'MP1.0'
02-26 00:41:51.738 17801 17817 E CRASH   : pid: 17801, tid: 17817, name: UnityMain  >>> com.github.shiena.mirror.android <<<
02-26 00:41:51.738 17801 17817 E CRASH   :     r0 0000000a  r1 00000000  r2 ffff0000  r3 00000000
02-26 00:41:51.738 17801 17817 E CRASH   :     r4 c9cd0000  r5 d3bfe58c  r6 d3bfe578  r7 d3bfe560
02-26 00:41:51.738 17801 17817 E CRASH   :     r8 efa33d8c  r9 ffff0000  sl 00000000  fp 00000000
02-26 00:41:51.738 17801 17817 E CRASH   :     ip 00000000  sp d3bfe510  lr e62adf38  pc c9f2c3a6  cpsr 00004599
02-26 00:41:51.738 17801 17817 E CRASH   :
02-26 00:41:51.738 17801 17817 E CRASH   : backtrace:
02-26 00:41:51.796 17801 17817 E CRASH   :      #00  pc 000053a6  /data/app/com.github.shiena.mirror.android-7SWrC2Q1uBg-nSmPizTXtA==/lib/arm/libenet.so (enet_address_get_host+45)
02-26 00:41:51.796 17801 17817 E CRASH   :      #01  pc 0000df34   ( (wrapper managed-to-native) ENet.Native:enet_address_get_host (ENet.ENetAddress,System.Text.StringBuilder,intptr) {0xcbd27d28} + 0x1c4 (0xe62add70 0xe62adfb0) [0xe8b0bf00 - Unity Root Domain]+57140)
02-26 00:41:51.796 17801 17817 E CRASH   :
02-26 00:41:51.796 17801 17817 E CRASH   : code around pc:
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c384 f04f4826 465b0c00 468a4478 f8d04691  &HO...[FxD.F.F..
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c394 f8d88000 900c0000 f8ad200a f8cd0010  ......... ......
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c3a4 f8bbc014 ba000010 f8ad0c00 a8040012  ................
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c3b4 0072e893 0208f100 c272464b f8bb4652  ..r.....KFr.RF..
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c3c4 910a1012 e9cd2104 9102cc00 f7fc211c  .....!.......!..
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c3d4 2808edde b9a0d008 0f00f1ba f1b9bf18  ...(............
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c3e4 d1070f00 e00e2000 46514658 f7fc464a  ..... ..XFQFJF..
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c3f4 e008edaa 21004650 f7fc464a 2800edce  ....PF.!JF.....(
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c404 f04fd1f0 990c30ff 2000f8d8 bf021a51  ..O..0..... Q...
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c414 e8bdb00d bdf00f00 ec98f7fc 00003b24  ............$;..
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c424 bfb82900 f0022180 0000b925 af06b5df  .)...!..%.......
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c434 4a0e4613 447a2908 68226814 d10b9203  .F.J.)zD.h"h....
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c444 22042104 a9029102 21019100 edb0f7fc  .!.".......!....
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c454 bf181c41 e0012000 30fff04f 68229903  A.... ..O..0.."h
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c464 bf041a51 bdd0b004 ec70f7fc 00003a76  Q.........p.v:..
02-26 00:41:51.797 17801 17817 E CRASH   :     c9f2c474 af03b5f0 8d04f84d 4a1ab088 46ec460c  ....M......J.F.F
02-26 00:41:51.797 17801 17817 E CRASH   :
02-26 00:41:51.797 17801 17817 E CRASH   : code around lr:
02-26 00:41:51.797 17801 17817 E CRASH   :     e62adf18 e59b203c e59b3040 e59bc044 e58dc000  < [email protected].......
02-26 00:41:51.797 17801 17817 E CRASH   :     e62adf28 e58d4004 e59bc054 e58dc008 eb000023  [email protected].......#...
02-26 00:41:51.797 17801 17817 E CRASH   :     e62adf38 e58b0010 e30b0924 e34d01ef e5900000  ....$.....M.....
02-26 00:41:51.797 17801 17817 E CRASH   :     e62adf48 e3500000 1a000010 eaffffff e30a08d8  ..P.............
02-26 00:41:51.797 17801 17817 E CRASH   :     e62adf58 e34c0bd1 e1a01006 ebfffd4a e59b0050  ..L.....J...P...
02-26 00:41:51.797 17801 17817 E CRASH   :     e62adf68 e1a01004 ebffff78 e1a00004 ebfffd77  ....x.......w...
02-26 00:41:51.797 17801 17817 E CRASH   :     e62adf78 e59b0010 e28b2058 e592c000 e592e004  ....X ..........
02-26 00:41:51.797 17801 17817 E CRASH   :     e62adf88 e58ec000 e28bdf40 e8bd9ff0 eb000008  ....@...........
02-26 00:41:51.798 17801 17817 E CRASH   :     e62adf98 e1a01000 e58b1030 e3500000 0affffea  ....0.....P.....
02-26 00:41:51.798 17801 17817 E CRASH   :     e62adfa8 e59b0030 ebffffff e59fc000 e12fff1c  0............./.
02-26 00:41:51.798 17801 17817 E CRASH   :     e62adfb8 ef5bfb50 e59fc000 e12fff1c ef5650fc  P.[......./..PV.
02-26 00:41:51.798 17801 17817 E CRASH   :     e62adfc8 e59fc000 e12fff1c c9f2c379 e59fc000  ....../.y.......
02-26 00:41:51.798 17801 17817 E CRASH   :     e62adfd8 e12fff1c d1dcfc2c 00000000 00000000  ../.,...........
02-26 00:41:51.798 17801 17817 E CRASH   :     e62adfe8 00000000 00000000 00000000 00000000  ................
02-26 00:41:51.798 17801 17817 E CRASH   :     e62adff8 00000000 00000000 00000000 00000000  ................
02-26 00:41:51.798 17801 17817 E CRASH   :     e62ae008 00000000 00000000 e1a0c00d e92d5ff0  ............._-.

Unable to stop LAN Host server

When hosting a game using Ignorance 1.0.9.8-master and the default Mirror Network Manager (ie just the pong scene with the Ignorance Transport instead), you are unable to stop the server. A InvalidOperationException is thrown. The server starts perfectly fine and people can even connect.

InvalidOperationException: Host not created
ENet.Host.CheckCreated () (at Assets/Ignorance/Dependencies/ENet.cs:410)
ENet.Host.Flush () (at Assets/Ignorance/Dependencies/ENet.cs:575)
Mirror.IgnoranceTransport.ClientDisconnect () (at Assets/Ignorance/IgnoranceTransport.cs:509)
Mirror.NetworkConnection.Disconnect () (at Assets/Mirror/Runtime/NetworkConnection.cs:78)
Mirror.NetworkServer.DisconnectAllConnections () (at Assets/Mirror/Runtime/NetworkServer.cs:252)
Mirror.NetworkServer.DisconnectAll () (at Assets/Mirror/Runtime/NetworkServer.cs:234)
Mirror.NetworkServer.Shutdown () (at Assets/Mirror/Runtime/NetworkServer.cs:44)
Mirror.NetworkManager.StopServer () (at Assets/Mirror/Runtime/NetworkManager.cs:321)
Mirror.NetworkManager.StopHost () (at Assets/Mirror/Runtime/NetworkManager.cs:308)
Mirror.NetworkManagerHUD.OnGUI () (at Assets/Mirror/Runtime/NetworkManagerHUD.cs:109)

To Reproduce

  1. Open Pong Example
  2. Go to Networkmanager and add Ignorance Transport (removing default Telepathy).
  3. Run the game and start a LAN Host
  4. Try to stop the server by pressing "stop"

Specs
Windows 7 64bit
Unity 2018.1.2 (64bit)
.NET 4.x Equivelent (Mono) [.NET 4.x]
Ignorance 1.0.9.8-master
Latest commit of Mirror

screenshot of Console

Ignorance remains in the Disconnecting client state even though the disconnect has occurred

I disconnect via StopHost () from NetworkManager
v55.3.8 Mirror
I get this error when disconnecting

NullReferenceException: Object reference not set to an instance of an object
IgnoranceTransport.Ignorance.ProcessClientPackets () (at Assets/Mirror/Runtime/Transport/Ignorance/Ignorance.cs:535)
IgnoranceTransport.Ignorance.ClientPump () (at Assets/Mirror/Runtime/Transport/Ignorance/Ignorance.cs:431)
IgnoranceTransport.Ignorance.FixedUpdate () (at Assets/Mirror/Runtime/Transport/Ignorance/Ignorance.cs:629)

NullReferenceException: Object reference not set to an instance of an object
IgnoranceTransport.Ignorance.ProcessClientPackets () (at Assets/Mirror/Runtime/Transport/Ignorance/Ignorance.cs:535)
IgnoranceTransport.Ignorance.ClientPump () (at Assets/Mirror/Runtime/Transport/Ignorance/Ignorance.cs:431)
IgnoranceTransport.Ignorance.Update () (at Assets/Mirror/Runtime/Transport/Ignorance/Ignorance.cs:641)

Question: Use Ignorance without Mirror/Unity

Hi,

Are there any plans to decouple Ignorance from Unity? We are looking to integrate the transport layer provided by Ignorance but we want to use our own non-unity networking library on top.

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.