@@ -22,177 +22,4 @@ public class LiteNetLibTransportProvider : NetworkTransportProvider
2222 public float UpdateInterval = 0.015f ;
2323 public override NetworkTransport MakeTransportInstance ( ) => new LiteNetLibTransport ( this ) ;
2424 }
25-
26- public class LiteNetLibTransport : NetworkTransport , INetEventListener
27- {
28- public class LNLConnection : TransportConnection
29- {
30- public LiteNetLibTransport Transport ;
31- public NetPeer LNLPeer ;
32- public override IEndPoint EndPoint => LNLPeer . EndPoint . ToNetickEndPoint ( ) ;
33- public override int Mtu => LNLPeer . Mtu ;
34- public LNLConnection ( LiteNetLibTransport transport )
35- {
36- Transport = transport ;
37- }
38- public unsafe override void Send ( IntPtr ptr , int length ) => LNLPeer . Send ( new ReadOnlySpan < byte > ( ptr . ToPointer ( ) , length ) , DeliveryMethod . Unreliable ) ;
39- public unsafe override void SendUserData ( IntPtr ptr , int length , TransportDeliveryMethod method ) => LNLPeer . Send ( new ReadOnlySpan < byte > ( ptr . ToPointer ( ) , length ) , method == TransportDeliveryMethod . Unreliable ? DeliveryMethod . Unreliable : DeliveryMethod . ReliableOrdered ) ;
40- }
41-
42- private LiteNetLibTransportProvider _provider ;
43- private NetManager _netManager ;
44- private NetDataWriter _writer = new NetDataWriter ( ) ;
45- private BitBuffer _buffer ;
46- private byte [ ] _connectionBytes = new byte [ 200 ] ;
47- private int _port ;
48- private Dictionary < NetPeer , LNLConnection > _clients ;
49- private Queue < LNLConnection > _freeClients ;
50-
51- public LiteNetLibTransport ( LiteNetLibTransportProvider provider )
52- {
53- this . _provider = provider ;
54- }
55-
56- public override void Init ( )
57- {
58- _clients = new ( Engine . Config . MaxPlayers ) ;
59- _freeClients = new ( Engine . Config . MaxPlayers ) ;
60- _buffer = new BitBuffer ( createChunks : false ) ;
61- _netManager = new NetManager ( this ) { AutoRecycle = true } ;
62- _netManager . DisconnectTimeout = ( int ) ( _provider . DisconnectTimeout * 1000 ) ;
63- _netManager . ReconnectDelay = ( int ) ( _provider . ReconnectInterval * 1000 ) ;
64- _netManager . MaxConnectAttempts = _provider . MaxConnectAttempts ;
65- _netManager . UpdateTime = ( int ) ( _provider . UpdateInterval * 1000 ) ;
66-
67- for ( int i = 0 ; i < Engine . Config . MaxPlayers ; i ++ )
68- _freeClients . Enqueue ( new LNLConnection ( this ) ) ;
69- }
70-
71- public override void PollEvents ( ) => _netManager . PollEvents ( ) ;
72- public override void ForceUpdate ( ) => _netManager . TriggerUpdate ( ) ;
73-
74- public override void Run ( RunMode mode , int port )
75- {
76- _port = port ;
77-
78- if ( mode == RunMode . Client )
79- {
80- _netManager . UnconnectedMessagesEnabled = true ;
81- _netManager . Start ( ) ;
82- }
83- else
84- {
85- _netManager . BroadcastReceiveEnabled = true ;
86- _netManager . Start ( port ) ;
87- }
88- }
89-
90- public override void Shutdown ( )
91- {
92- _netManager . Stop ( ) ;
93- }
94-
95- public override void Connect ( string address , int port , byte [ ] connectionData , int connectionDataLen )
96- {
97- if ( ! _netManager . IsRunning )
98- _netManager . Start ( ) ;
99-
100- if ( connectionData == null )
101- _netManager . Connect ( address , port , "" ) ;
102- else
103- {
104- _writer . Reset ( ) ;
105- _writer . Put ( connectionData , 0 , connectionDataLen ) ;
106- _netManager . Connect ( address , port , _writer ) ;
107- }
108- }
109-
110- public override void Disconnect ( TransportConnection connection )
111- {
112- _netManager . DisconnectPeer ( ( ( LNLConnection ) connection ) . LNLPeer ) ;
113- }
114-
115- void INetEventListener . OnConnectionRequest ( ConnectionRequest request )
116- {
117- if ( _clients . Count >= Engine . Config . MaxPlayers )
118- {
119- request . Reject ( ) ;
120- return ;
121- }
122-
123- int len = request . Data . AvailableBytes ;
124- request . Data . GetBytes ( _connectionBytes , 0 , len ) ;
125- bool accepted = NetworkPeer . OnConnectRequest ( _connectionBytes , len , request . RemoteEndPoint . ToNetickEndPoint ( ) ) ;
126-
127- if ( accepted )
128- request . Accept ( ) ;
129- else
130- request . Reject ( ) ;
131- }
132-
133- void INetEventListener . OnPeerConnected ( NetPeer peer )
134- {
135- var connection = _freeClients . Dequeue ( ) ;
136- connection . LNLPeer = peer ;
137- _clients . Add ( peer , connection ) ;
138- NetworkPeer . OnConnected ( connection ) ;
139- }
140-
141- void INetEventListener . OnPeerDisconnected ( NetPeer peer , DisconnectInfo disconnectInfo )
142- {
143- if ( ! Engine . IsServer )
144- {
145- if ( disconnectInfo . Reason == DisconnectReason . ConnectionRejected )
146- {
147- NetworkPeer . OnConnectFailed ( ConnectionFailedReason . Refused ) ;
148- return ;
149- }
150-
151- if ( disconnectInfo . Reason == DisconnectReason . ConnectionFailed || disconnectInfo . Reason == DisconnectReason . Timeout )
152- {
153- NetworkPeer . OnConnectFailed ( ConnectionFailedReason . Timeout ) ;
154- return ;
155- }
156-
157- if ( peer == null )
158- {
159- Debug . Log ( $ "LiteNetLib Network Error: { disconnectInfo . Reason } ") ;
160- NetworkPeer . OnConnectFailed ( ConnectionFailedReason . Refused ) ;
161- return ;
162- }
163- }
164-
165- if ( peer == null )
166- return ;
167-
168- if ( _clients . ContainsKey ( peer ) )
169- {
170- TransportDisconnectReason reason = disconnectInfo . Reason == DisconnectReason . Timeout ? TransportDisconnectReason . Timeout : TransportDisconnectReason . Shutdown ;
171- NetworkPeer . OnDisconnected ( _clients [ peer ] , reason ) ;
172- _freeClients . Enqueue ( _clients [ peer ] ) ;
173- _clients . Remove ( peer ) ;
174- }
175- }
176-
177- unsafe void INetEventListener . OnNetworkReceive ( NetPeer peer , NetPacketReader reader , byte channel , DeliveryMethod deliveryMethod )
178- {
179- if ( ! _clients . TryGetValue ( peer , out var c ) )
180- return ;
181-
182- fixed ( byte * ptr = reader . RawData )
183- {
184- _buffer . SetFrom ( ptr + reader . Position , reader . AvailableBytes , reader . RawData . Length ) ;
185- NetworkPeer . Receive ( c , _buffer ) ;
186- }
187- }
188-
189- void INetEventListener . OnNetworkError ( IPEndPoint endPoint , SocketError socketError )
190- {
191- Debug . Log ( "LiteNetLib Network Error: " + socketError ) ;
192- NetworkPeer . OnConnectFailed ( ConnectionFailedReason . Refused ) ;
193- }
194-
195- void INetEventListener . OnNetworkReceiveUnconnected ( IPEndPoint remoteEndPoint , NetPacketReader reader , UnconnectedMessageType messageType ) { }
196- void INetEventListener . OnNetworkLatencyUpdate ( NetPeer peer , int latency ) { }
197- }
19825}
0 commit comments