Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
151ce94
Add transport-nethernet package
Kas-tle Nov 30, 2025
ba15c3b
Correct discovery packet length and properly encode discovery string …
Kas-tle Dec 6, 2025
e5cd21a
Refactor NetherNetClientChannel using RTCDataChannelObserver to succe…
Kas-tle Dec 6, 2025
961a5c1
Encourage use of single PeerConnectionFactory
Kas-tle Dec 8, 2025
2265b69
Merge branch 'master' into feature/nethernet
Kas-tle Dec 15, 2025
1f4ded4
Switch to data only webrtc lib
Kas-tle Dec 28, 2025
7091257
Refactor to support joining realms
Kas-tle Dec 31, 2025
5add21b
Fix issues with connectionId being signed in SDP strings; fix LAN ser…
Kas-tle Jan 2, 2026
42c1272
Expose ice servers in NetherNetXboxSignaling
Kas-tle Jan 2, 2026
3a049c8
Remove native depends
Kas-tle Jan 2, 2026
3b6ef7a
Merge remote-tracking branch 'origin/master' into feature/nethernet
Kas-tle Jan 2, 2026
b7e1579
More robust logging and ICE/TURN parsing
Kas-tle Jan 4, 2026
1ae72d4
Properly track NetherNetServerChannel state
Kas-tle Jan 4, 2026
c29af62
Prep for nethernet release
Kas-tle Jan 4, 2026
6a8915d
Fix option access
Kas-tle Jan 4, 2026
d21d75b
Add max retries for client connect
Kas-tle Jan 10, 2026
8c31704
Fail connect promise if target network id is not found
Kas-tle Jan 10, 2026
bc30e63
Add case for Delivery Acknowledgement
Kas-tle Jan 10, 2026
32e5d19
Refactor to use specific functional interfaces for all string handler…
Kas-tle Jan 10, 2026
ae2aba5
Use connectexception if we can't reach xbox signaling
Kas-tle Jan 10, 2026
c7685d5
Complete with ConnectException if we cannot connect to xbox signaling…
Kas-tle Jan 10, 2026
5a50d9f
Use ConnectException for handshake failure
Kas-tle Jan 10, 2026
20d3e92
Update README structure
Kas-tle Jan 10, 2026
0c642a5
Small README tweaks
Kas-tle Jan 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions .github/readme/nethernet_client_dark.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
config:
layout: elk
theme: redux-dark
---
flowchart LR
subgraph TransportLayer["<b>NetherNet Transport</b>"]
direction TB
Native["<b>WebRTC Native</b><br><i>libdatachannel</i>"]
DataChannel["<b>RTCDataChannel</b><br><i>Reliability & Ordering</i>"]
ClientChannel["<b>NetherNetClientChannel</b><br><i>Netty Adapter</i>"]
end
subgraph UserPipeline["<b>User ChannelPipeline</b>"]
UserLogic["<b>User Handlers</b><br><i>Application Logic</i>"]
end

Network(("Network (DTLS/UDP)"))
Network == Encrypted Frame ==> Native
Native == Reassembled Message ==> DataChannel
DataChannel == <i>RTCDataChannelBuffer</i> ==> ClientChannel
ClientChannel == <i>ByteBuf</i> ==> UserLogic
UserLogic == <i>ByteBuf</i> ==> ClientChannel
ClientChannel == <i>RTCDataChannelBuffer</i> ==> DataChannel
DataChannel == Message ==> Native
Native == Encrypted Frame ==> Network
Native:::shared
DataChannel:::shared
ClientChannel:::shared

classDef shared fill:#e67e22,stroke:#333,stroke-width:2px

linkStyle 0 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 1 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 2 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 3 stroke:#2ecc71,stroke-width:4px,color:#2ecc71

linkStyle 4 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 5 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 6 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 7 stroke:#3498db,stroke-width:4px,color:#3498db
102 changes: 102 additions & 0 deletions .github/readme/nethernet_client_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions .github/readme/nethernet_client_light.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
config:
layout: elk
theme: redux
---
flowchart LR
subgraph TransportLayer["<b>NetherNet Transport</b>"]
direction TB
Native["<b>WebRTC Native</b><br><i>libdatachannel</i>"]
DataChannel["<b>RTCDataChannel</b><br><i>Reliability & Ordering</i>"]
ClientChannel["<b>NetherNetClientChannel</b><br><i>Netty Adapter</i>"]
end
subgraph UserPipeline["<b>User ChannelPipeline</b>"]
UserLogic["<b>User Handlers</b><br><i>Application Logic</i>"]
end

Network(("Network (DTLS/UDP)"))
Network == Encrypted Frame ==> Native
Native == Reassembled Message ==> DataChannel
DataChannel == <i>RTCDataChannelBuffer</i> ==> ClientChannel
ClientChannel == <i>ByteBuf</i> ==> UserLogic
UserLogic == <i>ByteBuf</i> ==> ClientChannel
ClientChannel == <i>RTCDataChannelBuffer</i> ==> DataChannel
DataChannel == Message ==> Native
Native == Encrypted Frame ==> Network
Native:::shared
DataChannel:::shared
ClientChannel:::shared

classDef shared fill:#e67e22,stroke:#333,stroke-width:2px

linkStyle 0 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 1 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 2 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 3 stroke:#2ecc71,stroke-width:4px,color:#2ecc71

linkStyle 4 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 5 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 6 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 7 stroke:#3498db,stroke-width:4px,color:#3498db
102 changes: 102 additions & 0 deletions .github/readme/nethernet_client_light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 46 additions & 0 deletions .github/readme/nethernet_server_dark.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
config:
layout: elk
theme: redux-dark
---
flowchart LR
subgraph TransportLayer["<b>NetherNet Transport</b>"]
direction TB
Native["<b>WebRTC Native</b><br><i>libdatachannel</i>"]
DataChannel["<b>RTCDataChannel</b><br><i>Reliability & Ordering</i>"]
ChildChannel["<b>NetherNetChildChannel</b><br><i>Netty Adapter</i>"]
end
subgraph UserPipeline["<b>User ChannelPipeline</b>"]
UserLogic["<b>User Handlers</b><br><i>Application Logic</i>"]
end

Network(("Network (DTLS/UDP)"))

%% Inbound
Network == Encrypted Frame ==> Native
Native == Reassembled Message ==> DataChannel
DataChannel == <i>RTCDataChannelBuffer</i> ==> ChildChannel
ChildChannel == <i>ByteBuf</i> ==> UserLogic

%% Outbound
UserLogic == <i>ByteBuf</i> ==> ChildChannel
ChildChannel == <i>RTCDataChannelBuffer</i> ==> DataChannel
DataChannel == Message ==> Native
Native == Encrypted Frame ==> Network

%% Styling
Native:::shared
DataChannel:::shared
ChildChannel:::shared

classDef shared fill:#e67e22,stroke:#333,stroke-width:2px

linkStyle 0 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 1 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 2 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 3 stroke:#2ecc71,stroke-width:4px,color:#2ecc71

linkStyle 4 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 5 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 6 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 7 stroke:#3498db,stroke-width:4px,color:#3498db
102 changes: 102 additions & 0 deletions .github/readme/nethernet_server_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions .github/readme/nethernet_server_light.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
config:
layout: elk
theme: redux
---
flowchart LR
subgraph TransportLayer["<b>NetherNet Transport</b>"]
direction TB
Native["<b>WebRTC Native</b><br><i>libdatachannel</i>"]
DataChannel["<b>RTCDataChannel</b><br><i>Reliability & Ordering</i>"]
ChildChannel["<b>NetherNetChildChannel</b><br><i>Netty Adapter</i>"]
end
subgraph UserPipeline["<b>User ChannelPipeline</b>"]
UserLogic["<b>User Handlers</b><br><i>Application Logic</i>"]
end

Network(("Network (DTLS/UDP)"))
Network == Encrypted Frame ==> Native
Native == Reassembled Message ==> DataChannel
DataChannel == <i>RTCDataChannelBuffer</i> ==> ChildChannel
ChildChannel == <i>ByteBuf</i> ==> UserLogic
UserLogic == <i>ByteBuf</i> ==> ChildChannel
ChildChannel == <i>RTCDataChannelBuffer</i> ==> DataChannel
DataChannel == Message ==> Native
Native == Encrypted Frame ==> Network
Native:::shared
DataChannel:::shared
ChildChannel:::shared

classDef shared fill:#e67e22,stroke:#333,stroke-width:2px

linkStyle 0 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 1 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 2 stroke:#2ecc71,stroke-width:4px,color:#2ecc71
linkStyle 3 stroke:#2ecc71,stroke-width:4px,color:#2ecc71

linkStyle 4 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 5 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 6 stroke:#3498db,stroke-width:4px,color:#3498db
linkStyle 7 stroke:#3498db,stroke-width:4px,color:#3498db
102 changes: 102 additions & 0 deletions .github/readme/nethernet_server_light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions .github/readme/raknet_client_dark.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
config:
layout: elk
theme: redux-dark
---
flowchart LR
subgraph InternalPipeline["<b>RakNet Internal Pipeline</b><br>(Parent DatagramChannel)"]
direction TB
ProxyRoute["<b>RakClientProxyRouteHandler</b><br><i>Routes to/from Client Channel</i>"]
DatagramCodec["<b>RakDatagramCodec</b><br><i>Encodes/Decodes<br>RakNet Datagrams</i>"]
AckHandler["<b>RakAcknowledgeHandler</b><br><i>Manages ACKs/NACKs</i>"]
SessionCodec["<b>RakSessionCodec</b><br><i>Reliability, Ordering,<br>Split Packets</i>"]
end
subgraph UserPipeline["<b>User ChannelPipeline</b><br>(RakClientChannel)"]
UserLogic["<b>User Handlers</b><br><i>Application Logic</i>"]
end
Network(("Network Socket")) == Inbound <i>UDP Datagram</i> ==> DatagramCodec
DatagramCodec == <i>EncapsulatedPacket</i> ==> AckHandler
AckHandler == <i>EncapsulatedPacket</i> ==> SessionCodec & DatagramCodec
SessionCodec == <i>ByteBuf</i> ==> ProxyRoute
ProxyRoute == <i>ByteBuf</i> ==> UserLogic & SessionCodec
UserLogic == <i>ByteBuf</i> ==> ProxyRoute
SessionCodec == <i>EncapsulatedPacket</i> ==> AckHandler
DatagramCodec == Outbound <i>UDP Datagram</i> ==> Network

ProxyRoute:::shared
DatagramCodec:::shared
AckHandler:::shared
SessionCodec:::shared
classDef shared fill:#9b59b6,stroke:#333,stroke-width:2px
linkStyle 0 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 1 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 2 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 3 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 4 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 5 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 6 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 7 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 8 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 9 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
102 changes: 102 additions & 0 deletions .github/readme/raknet_client_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions .github/readme/raknet_client_light.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
config:
layout: elk
theme: redux
---
flowchart LR
subgraph InternalPipeline["<b>RakNet Internal Pipeline</b><br>(Parent DatagramChannel)"]
direction TB
ProxyRoute["<b>RakClientProxyRouteHandler</b><br><i>Routes to/from Client Channel</i>"]
DatagramCodec["<b>RakDatagramCodec</b><br><i>Encodes/Decodes<br>RakNet Datagrams</i>"]
AckHandler["<b>RakAcknowledgeHandler</b><br><i>Manages ACKs/NACKs</i>"]
SessionCodec["<b>RakSessionCodec</b><br><i>Reliability, Ordering,<br>Split Packets</i>"]
end
subgraph UserPipeline["<b>User ChannelPipeline</b><br>(RakClientChannel)"]
UserLogic["<b>User Handlers</b><br><i>Application Logic</i>"]
end
Network(("Network Socket")) == Inbound <i>UDP Datagram</i> ==> DatagramCodec
DatagramCodec == <i>EncapsulatedPacket</i> ==> AckHandler
AckHandler == <i>EncapsulatedPacket</i> ==> SessionCodec & DatagramCodec
SessionCodec == <i>ByteBuf</i> ==> ProxyRoute
ProxyRoute == <i>ByteBuf</i> ==> UserLogic & SessionCodec
UserLogic == <i>ByteBuf</i> ==> ProxyRoute
SessionCodec == <i>EncapsulatedPacket</i> ==> AckHandler
DatagramCodec == Outbound <i>UDP Datagram</i> ==> Network

ProxyRoute:::shared
DatagramCodec:::shared
AckHandler:::shared
SessionCodec:::shared
classDef shared fill:#9b59b6,stroke:#333,stroke-width:2px
linkStyle 0 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 1 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 2 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 3 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 4 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 5 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 6 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 7 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 8 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 9 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
102 changes: 102 additions & 0 deletions .github/readme/raknet_client_light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 46 additions & 0 deletions .github/readme/raknet_server_dark.mmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
config:
layout: elk
theme: redux-dark
---
flowchart RL
subgraph InternalPipeline["<b>RakNet Internal Pipeline</b><br>(RakChildChannel)"]
direction TB
ChildDatagramHandler["<b>RakChildDatagramHandler</b><br><i>Bridge to Parent Channel</i>"]
DatagramCodec["<b>RakDatagramCodec</b><br><i>Encodes/Decodes<br>RakNet Datagrams</i>"]
AckHandler["<b>RakAcknowledgeHandler</b><br><i>Manages ACKs/NACKs</i>"]
SessionCodec["<b>RakSessionCodec</b><br><i>Reliability, Ordering,<br>Split Packets</i>"]
end
subgraph UserPipeline["<b>User ChannelPipeline</b>"]
UserLogic["<b>User Handlers</b><br><i>Application Logic<br>(e.g. Bedrock Protocol)</i>"]
end
Network(("Network Socket")) == Inbound <i>UDP Datagram</i> ==> Parent["<b>RakServerChannel</b><br><i>UDP Bind &amp; Routing</i>"]
Parent == Routed <i>DatagramPacket</i> ==> ChildDatagramHandler
ChildDatagramHandler == <i>DatagramPacket</i> ==> DatagramCodec & Parent
DatagramCodec == <i>EncapsulatedPacket</i> ==> AckHandler
AckHandler == <i>EncapsulatedPacket</i> ==> SessionCodec & DatagramCodec
SessionCodec == <i>ByteBuf</i> ==> UserLogic
UserLogic == <i>ByteBuf</i> ==> SessionCodec
SessionCodec == <i>EncapsulatedPacket</i> ==> AckHandler
DatagramCodec == <i>DatagramPacket</i> ==> ChildDatagramHandler
Parent == Outbound <i>UDP Datagram</i> ==> Network

ChildDatagramHandler:::shared
DatagramCodec:::shared
AckHandler:::shared
SessionCodec:::shared
classDef shared fill:#9b59b6,stroke:#333,stroke-width:2px
classDef incoming fill:#2ecc71,stroke:#333,stroke-width:2px
classDef outgoing fill:#3498db,stroke:#333,stroke-width:2px
linkStyle 0 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 1 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 2 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 3 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 4 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 5 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 6 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 7 stroke:#2ecc71,stroke-width:4px,color:#2ecc71,fill:none
linkStyle 8 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 9 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 10 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
linkStyle 11 stroke:#3498db,stroke-width:4px,color:#3498db,fill:none
Loading
Loading