Commit graph

114 commits

Author SHA1 Message Date
Kamron Batman
3c0d6cb9d6
feat: Upgrades networking to use io_uring. (#2315)
> [!IMPORTANT]
> **Breaking Changes**
> - DecodePacket and EncodePacket delegates replaced with IClientEncryption interface
> - NetState.Connection (Socket) replaced with internal RingSocket management
> - NetState.RecvPipe and NetState.SendPipe removed (buffers managed internally)

## Summary

Upgrades the networking stack from PollGroup-based I/O to io_uring, significantly improving I/O performance on Linux.
This also adds native client encryption support for encrypted UO clients.

## Major Changes

io_uring Networking Architecture
- Replaced PollGroup with IORingGroup for async socket I/O operations
- Removed Pipe.cs (mirrored ring buffer) and TcpServer.cs in favor of RingSocketManager
- Added NetState.Network.cs - centralized network infrastructure handling accept, recv, send, and disconnect
completions
- Added SocketHelper.cs - platform-specific socket utilities for raw socket handle operations (getpeername,
getsockname)
- Buffer management now handled by RingSocketManager with configurable slab allocation

### Client Encryption Support
- Added full encryption stack in Network/Encryption/:
  - EncryptionConfig.cs - configurable encryption modes (None, Unencrypted, Encrypted, Both)
  - EncryptionManager.cs - encryption detection and initialization for login/game packets
  - LoginEncryption.cs - handles login packet encryption with version-derived keys
  - GameEncryption.cs - handles game server encryption using Twofish
  - TwofishEngine.cs - optimized Twofish block cipher implementation
  - LoginKeys.cs - encryption key table for client versions
  - IClientEncryption.cs - interface for client encryption implementations

### NetState Improvements
- Replaced Socket Connection with RingSocket _socket for managed socket lifecycle
- Changed from GCHandle polling to event-based completion processing
- Disconnect handling now properly waits for pending sends to flush
- Simplified connecting socket management using lazy queue removal

### Configuration
- New settings: network.encryptionMode and network.encryptionDebug
- Encryption mode flags: Unencrypted, Encrypted, or Both

### Dependencies
- Replaced PollGroup NuGet package with IORingGroup
- Linux requires liburing-dev / liburing-devel package

### Test plan

- Verify server starts and accepts connections on Linux with io_uring
- Verify server starts and accepts connections on Windows (fallback to IOCP)
- Test unencrypted client connections (ClassicUO with encryption disabled)
- Test encrypted client connections if available
- Verify graceful disconnect flushes pending data
- Confirm CI builds pass on all target platforms
2026-02-01 16:02:32 -08:00
Kamron Batman
5aed018232
chore: Update README with logo link and image sources 2025-11-25 20:05:05 -08:00
Kamron Batman
c5bbe0bc90
chore: Updates README.md to use stable CDN links for images. 2025-11-25 17:35:22 -08:00
Kamron Batman
ea86d5b2a6
chore: Adds Debian 13 to CI/CD (#2277) 2025-11-23 10:09:42 -08:00
Kamron Batman
5d920a25b1
chore: Updates .NET reference material to 10 (#2261) 2025-11-12 23:03:14 -08:00
Kamron Batman
52e309ef95
chore: Updates readme files (#2247) 2025-07-27 11:04:32 -07:00
Kamron Batman
4e23a8e205
chore: Updates JB logo per Jetbrain's request. (#2203) 2025-05-28 00:09:36 -07:00
Kamron Batman
c75514cc04
feat: Updates to .NET 9 (#1984)
### Summary

* Bumps to .NET 9 with updated dependencies
* Comparing a value type against null is no longer allowed
* CI/CD now uses the version specified in global.json
* Serialization generator updated to .NET 9 with bug fixes, fixes to turkish language, and parallelization
2024-12-08 10:16:34 -08:00
Kamron Batman
97c53e656e
chore (README.md): Update .NET requirements in README (#1956) 2024-09-18 09:17:16 -07:00
Kamron Batman
113a6b1f7c
fix (README.md): Fixes the supported operating systems. (#1955) 2024-09-18 09:13:47 -07:00
Kamron Batman
ad26f0a1cb
chore(build): Updates supported linux operating systems (#1820)
### Summary
- Removes CentOS 7/8
- Removes RedHat 7
- Removes Fedora 37/38
- Adds Fedora 40
- Bumps minimum .NET to 8.0.6 (8.0.301)
2024-06-03 15:40:49 -07:00
Kamron Batman
1f701e7b55
feat: Replaces Zlib with LibDeflate (#1774)
> [!Warning]
> Users on Linux/OSX will need to follow the Readme
> and make sure `libdeflate` is properly installed

> [!Note]
> **Developer Note**
> The API for compression has changed. Use `Deflate.Standard` for the same functionality.

### Summary
* Replaces Zlib with LibDeflate for a 50% performance improvement!
* Adds MacOS 14 to properly test Arm64
2024-05-16 22:53:01 -07:00
Kamron Batman
5f3de6537b
chore: Update README.md (#1661) 2024-01-20 14:24:44 -08:00
Kamron Batman
c487aab3f9
doc(chore): Update README.md - Fix another link (#1637) 2023-12-14 12:18:27 -08:00
FiftyTifty
49ccc8cfee
doc(chore): Update README.md - .Net 8.0 Link (#1636) 2023-12-14 12:15:19 -08:00
Kamron Batman
4f6afad10b
chore: Update README.md for Sonoma support (#1620) 2023-11-26 09:41:41 -08:00
Kamron Batman
f7626b64f3
chore: Bump fedora version in README.md (#1594) 2023-11-14 17:35:00 -08:00
Kamron Batman
2e4668dbe5
feat: Updates to .NET 8. (#1542)
### Breaking Changes
- Updating to .NET 8 - Required O/S's have slightly changed.
2023-11-14 17:08:09 -08:00
Kamron Batman
dfca90e076
chore: Adds VC++ Redist 17 to README (#1498) 2023-09-13 22:54:32 -07:00
Kamron Batman
2c8d54549c
fix: Changes C# version to 11 (#1461) 2023-08-16 20:12:56 -07:00
Kamron Batman
72557ffb97
fix (readme): Update README.md (#1432) 2023-07-26 20:54:10 -07:00
Kamron Batman
d9d04f1f38
fix: Adds better arm64 support (#1409) 2023-07-26 20:43:42 -07:00
Kamron Batman
c93fa004a3
chore: Bumps dependencies (#1414) 2023-06-20 22:57:16 -07:00
Kamron Batman
a7edba3712
fix: Removes scoped for gump AppendTo (#1405)
### Summary
.NET 6 had a bug that required the `scoped` keyword for the gump AppendTo. It looks like this was fixed since then.
2023-05-21 00:46:25 -07:00
Kamron Batman
f92d821168
fix: Fixes timezone issue (#1388)
### Summary
Removes the timezone specific logic in favor of globalization non-invariance. This should fix culture issues too.
2023-05-19 16:40:06 -07:00
Kamron Batman
ac7c3522f4
fix: Updates .NET 7 SDK to 7.0.201 for CI/CD (#1351) 2023-02-25 00:57:18 -08:00
Kamron Batman
3f400fc965
docs: Adds tzdata to README (#1317) 2022-12-30 15:32:54 -08:00
Kamron Batman
94199f1186
fix: Adds migration checks to CICD, updates dependencies, adds Fedora 37, alpine 3.17 support (#1309)
- [X] Automatically collapses migration files in github PRs.
- [X] CI/CD now checks to see if migrations are missing or modified.
- [X] Updates dependencies
- [X] Adds Fedora 37, Alpine 3.17 support
2022-12-22 12:12:47 -08:00
Kamron Batman
d172b5f742
docs: Fixes README build badge 2022-12-18 11:50:31 -08:00
Kamron Batman
5bd41d5b68
feat: Adds .NET 7 & Arm64 support (#1229)
## BREAKING CHANGE
**Publishing for linux will no longer include runtimes**

## Major Changes
* Adds .NET 7 support.
* Adds ARM64 support (experimental).
* Changes linux support to be open-ended against anything .NET 7 supports.
* Fixes native library resolutions. (Make sure to install `dev` versions of the libraries)
* Updates README
* Adds Ubuntu 22, CentOS 8/9 Stream to CI/CD.

## TODOs:
* Update modernuo.com docs

Closes #1173
Closes #1159
2022-11-06 09:59:11 -08:00
Kamron Batman
f5122fff2a
docs: Adds contributors section to readme 2022-09-30 14:49:28 -07:00
Kamron Batman
6b3a9f08e9
fix: Fixes readme syntax 2022-09-06 10:28:44 -07:00
Kamron Batman
5f91598c15
chore: Add generic linux target (#1164) 2022-09-06 10:28:19 -07:00
Kamron Batman
caa72bcc81
chore: Update README to bump required Rider version (#1160) 2022-09-04 09:08:16 -07:00
Kamron Batman
0bd7d31702
chore: Updates README.md to specify new .NET 6 version. (#1158) 2022-09-04 09:04:57 -07:00
Kamron Batman
8509b1f8a0
chore: Updates whats changed (#1082) 2022-06-19 19:55:55 -07:00
Kamron Batman
9c8f73aaf8
chore: Updates minimum .net 6 version 2022-06-17 01:48:25 -07:00
Kamron Batman
5d6be05ad1
chore: Fixes CI build/test for Fedora (#1056) 2022-06-13 12:18:00 -07:00
Kamron Batman
e172dc9661
fix: Updates dependencies & adds Fedora 35/36 support (#1029) 2022-05-19 10:51:24 -07:00
Kamron Batman
5d972caa9c
fix: Changes Fedora to use new icon and color 2022-04-15 00:47:03 -07:00
Kamron Batman
d451ed0fd3
Adds Material Theme to thank you 2022-03-28 14:36:43 -07:00
Kamron Batman
699478425f
chore: Updates readme to remove blurb about schema migration (#937) 2022-02-18 11:15:32 -08:00
Kamron Batman
573ddfa27b
docs: Updates installation docs for the main site. (#911) 2022-01-03 19:05:28 -08:00
Kamron Batman
a264f2a34e
readme: Fixes Fedora on README (#894) 2021-12-26 00:43:04 -08:00
Kamron Batman
b3c153eae3
fix: Removes Debian 9 support, Adds Windows 11 (#877) 2021-12-05 00:13:47 -08:00
Kamron Batman
a103b2af2d
fix: Updates README (#876) 2021-12-05 00:02:32 -08:00
Kamron Batman
c31bf20d0e
feat: Updates to .NET 6 (#843)
* Fixes an issue with moving directories across volumes
* Removes usages of WebClient
* Removes usages of Cryptographic Providers

Note: Even though .NET 6 introduces Xoshiro RNG, there is no way to control the seed. I'll do some reconciliation of Xoshiro so it functions closer to the built in one. For the most part, it has parity though.
Benchmarks show there is nothing odd about the implementations, they are within 1ns of each other.
2021-11-13 13:38:01 -08:00
Kamron Batman
ec785e6f07
fix: Updates dependencies, cleans up csproj, and updates README (#784) 2021-09-15 09:54:15 -07:00
Michael Dijkstra
50dd7a1146
fix: README publish link (#699) 2021-08-18 08:35:28 -07:00
Kamron Batman
cb3895148d
fix(readme): Updates IDE requirements (#677) 2021-08-07 14:57:37 -07:00