Home

Awesome

<p align="center"> <img src="https://i.imgur.com/CxkUxTs.png" alt="alt logo"> </p>

Ko-Fi PayPal MIT Licensed Master Build

Please consider a donation (see the Ko-Fi button above) if this project is useful to you.

What's this?

In short, this is an independent ENet native implementation with a modified protocol for C, C++, C#, and other languages. The native C library code (although condensed) included in both this fork and upstream uses is located here.

Why another fork?

This fork started since nxrighthere's repository was originally archived, disabling the ability to report issues and submit pull requests.

Due to this, I forked his repository manually and this is the result. As a result, developers can ask questions about Enet, get answers and submit pull requests to improve the implementation.

This repository might not always have the latest version of the implementation from upstream, as careful integration of fork-specific features needs to be taken. However, I will try to keep it in sync with upstream as much as possible.

Native Library Features

Upstream Compatibility

In theory, upstream binaries can be used with this fork unless things change dramatically. To err on the safe side, use the automatic builds located on the release page.

In short: just use the automatic build binaries in Releases.

Obtaining Native Libraries

Easy Mode

You can get precompiled binaries for use with this fork by checking out the Releases page.

Hard Mode

If you don't want to take the automatically built libraries in the releases section, you can use the Visual Studio MS Build engine to build a binary for your platform(s).

However the following will be oriented for power users and command line heroes, and requires NET Core SDK 2.2 to work correctly.

Desktop Compiling

Mobile Compiling

Console Compiling

Recipe for victory

You will see a Ignorance banner fly by and the compile will start. CMake will then be invoked and configure the build after inspecting your environment. If all is well, a binary blob inside the Unity/Plugins directory will be generated.

If it does not compile successfully, read the error messages it provides and file an issue ticket if you are not able to solve it yourself.

On Windows, this freshly baked library will be called enet.dll DLL, on Mac it will be libenet.bundle and on Linux it will be a shared object (libenet.so). This can be used with Unity or other applications like a C# NET Core application or C/C++ apps. Unity users should take note that you may need to rename libenet.bundle to libenet.dylib for Unity to load the plugin at runtime.

Rebuilding the native binaries

Inside the directory that you cloned the repo to, run:

It is recommended to clean the repository work space before building.

Testing

Usage

Code Examples/Quick Start

API Documentation

Multi-threaded Enet Implementation

Strategy

The best-known strategy is to use ENet in an independent I/O thread. This can be achieved by using Threads as well as ConcurrentQueues, RingBuffers and Disruptors, for example.

You can use whatever system you are comfortable with, just make sure you keep ENet pumping as fast as possible in your application. Not pumping fast enough will cause Enet to become backlogged/congested, and this will hurt performance and network throughput.

A real world example is Oiran Studio's Ignorance transport which uses ConcurrentQueues for high performance transport I/O.

Thread Safety

In general, ENet is not thread-safe, but some of its functions can be used safely if the user is careful enough:

Supporters

Enet-CSharp is supported by, used internally and mantained by Oiran Studio.

<p align="left"> <img src="http://www.oiran.studio/OiranFanFinal_Colour_Mini.png" alt="Oiran Studio Logo"> </p>

Credits