Skip to content

RevenantX/LiteNetLib

Repository files navigation

LiteNetLib

Lite reliable UDP library for .NET Standard 2.0 (Mono, .NET Core, .NET Framework)

Made in Ukraine

HighLevel API Part: LiteEntitySystem

Discord chat: Discord

OLD BRANCH (and examples) for 0.9.x

Little Game Example on Unity

Documentation

Build

( Warning! Master branch can be unstable! )

Features

  • Lightweight
    • Small CPU and RAM usage
    • Small packet size overhead ( 1 byte for unreliable, 4 bytes for reliable packets )
  • Simple connection handling
  • Peer to peer connections
  • Helper classes for sending and reading messages
  • Multiple data channels
  • Different send mechanics
    • Reliable with order
    • Reliable without order
    • Reliable sequenced (reliable only last packet)
    • Ordered but unreliable with duplication prevention
    • Simple UDP packets without order and reliability
  • Fast packet serializer (Usage manual)
  • Automatic small packets merging
  • Automatic fragmentation of reliable packets
  • Automatic MTU detection
  • Optional CRC32C checksums
  • UDP NAT hole punching
  • NTP time requests
  • Packet loss and latency simulation
  • IPv6 support (using separate socket for performance)
  • Connection statistics
  • Multicasting (for discovering hosts in local network)
  • Unity support
  • Support for .NET8 optimized socket calls (much less gc)
  • Supported platforms:
    • Windows/Mac/Linux (.NET Framework, Mono, .NET Core, .NET Standard)
    • Lumin OS (Magic Leap)
    • MonoGame
    • Godot
    • Unity 2018.3 (Desktop platforms, Android, iOS, Switch)

Support developer

  • "Buy Me A Coffee"

  • USDT TRC20: TE5eBgq8SyEeZFKtCgZG9GwL34sANmbc67

  • USDT BEP20/ERC20: 0x4c0D6DC76c6A6B354f5ec6c9e51893fFC6510d1E

  • Bitcoin: bc1q269ecs8r5vnrum5qr5j98sdglhnxlulv0f6egd

Unity notes!!!

  • Minimal supported Unity is 2018.3. For older Unity versions use 0.9.x library versions
  • Always use library sources or OpenUPM package instead of precompiled DLL files ( because there are platform specific #ifdefs and workarounds for unity bugs )

Usage samples

Client

EventBasedNetListener listener = new EventBasedNetListener(); NetManager client = new NetManager(listener); client.Start(); client.Connect("localhost" /* host IP or name */, 9050 /* port */, "SomeConnectionKey" /* text key or NetDataWriter */); listener.NetworkReceiveEvent += (fromPeer, dataReader, deliveryMethod, channel) => { Console.WriteLine("We got: {0}", dataReader.GetString(100 /* max length of string */)); dataReader.Recycle(); }; while (!Console.KeyAvailable) { client.PollEvents(); Thread.Sleep(15); } client.Stop();

Server

EventBasedNetListener listener = new EventBasedNetListener(); NetManager server = new NetManager(listener); server.Start(9050 /* port */); listener.ConnectionRequestEvent += request => { if(server.ConnectedPeersCount < 10 /* max connections */) request.AcceptIfKey("SomeConnectionKey"); else request.Reject(); }; listener.PeerConnectedEvent += peer => { Console.WriteLine("We got connection: {0}", peer); // Show peer IP NetDataWriter writer = new NetDataWriter(); // Create writer class writer.Put("Hello client!"); // Put some string peer.Send(writer, DeliveryMethod.ReliableOrdered); // Send with reliability }; while (!Console.KeyAvailable) { server.PollEvents(); Thread.Sleep(15); } server.Stop();