33using System . Collections . Generic ;
44using ENet ;
55using MLAPI . Transports ;
6+ using Event = ENet . Event ;
7+ using EventType = ENet . EventType ;
68
79namespace MLAPI . EnetTransport
810{
@@ -47,7 +49,7 @@ public override void Send(ulong clientId, ArraySegment<byte> data, string channe
4749 packet . Create ( data . Array , data . Offset , data . Count , internalChannels [ channelNameToId [ channelName ] ] . Flags ) ;
4850
4951 GetEnetConnectionDetails ( clientId , out uint peerId ) ;
50-
52+
5153 connectedEnetPeers [ peerId ] . Send ( channelNameToId [ channelName ] , ref packet ) ;
5254 }
5355
@@ -60,109 +62,108 @@ public override NetEventType PollEvent(out ulong clientId, out string channelNam
6062 {
6163 Event @event ;
6264
63- if ( host . CheckEvents ( out @event ) <= 0 && host . Service ( 0 , out @event ) > 0 )
65+ if ( host . CheckEvents ( out @event ) <= 0 )
6466 {
65- clientId = GetMLAPIClientId ( @event . Peer . ID , false ) ;
66-
67- switch ( @event . Type )
67+ if ( host . Service ( 0 , out @event ) <= 0 )
6868 {
69- case EventType . None :
70- {
71- channelName = null ;
72- payload = new ArraySegment < byte > ( ) ;
73-
74- return NetEventType . Nothing ;
75- }
76- case EventType . Connect :
77- {
78- channelName = null ;
79- payload = new ArraySegment < byte > ( ) ;
80-
81- connectedEnetPeers . Add ( @event . Peer . ID , @event . Peer ) ;
82-
83- return NetEventType . Connect ;
84- }
85- case EventType . Disconnect :
86- {
87- channelName = null ;
88- payload = new ArraySegment < byte > ( ) ;
69+ clientId = 0 ;
70+ channelName = null ;
71+ payload = new ArraySegment < byte > ( ) ;
8972
90- connectedEnetPeers . Remove ( @event . Peer . ID ) ;
91-
92- return NetEventType . Disconnect ;
93- }
94- case EventType . Receive :
73+ return NetEventType . Nothing ;
74+ }
75+ }
76+
77+ clientId = GetMLAPIClientId ( @event . Peer . ID , false ) ;
78+
79+ switch ( @event . Type )
80+ {
81+ case EventType . None :
82+ {
83+ channelName = null ;
84+ payload = new ArraySegment < byte > ( ) ;
85+
86+ return NetEventType . Nothing ;
87+ }
88+ case EventType . Connect :
89+ {
90+ channelName = null ;
91+ payload = new ArraySegment < byte > ( ) ;
92+
93+ connectedEnetPeers . Add ( @event . Peer . ID , @event . Peer ) ;
94+
95+ return NetEventType . Connect ;
96+ }
97+ case EventType . Disconnect :
98+ {
99+ channelName = null ;
100+ payload = new ArraySegment < byte > ( ) ;
101+
102+ connectedEnetPeers . Remove ( @event . Peer . ID ) ;
103+
104+ return NetEventType . Disconnect ;
105+ }
106+ case EventType . Receive :
107+ {
108+ channelName = channelIdToName [ @event . ChannelID ] ;
109+ int size = @event . Packet . Length ;
110+
111+ if ( size > messageBuffer . Length )
95112 {
96- channelName = channelIdToName [ @event . ChannelID ] ;
97- int size = @event . Packet . Length ;
98-
99- if ( size > messageBuffer . Length )
113+ byte [ ] tempBuffer ;
114+
115+ if ( temporaryBufferReference != null && temporaryBufferReference . IsAlive && ( ( byte [ ] ) temporaryBufferReference . Target ) . Length >= size )
100116 {
101- byte [ ] tempBuffer ;
102-
103- if ( temporaryBufferReference != null && temporaryBufferReference . IsAlive && ( ( byte [ ] ) temporaryBufferReference . Target ) . Length >= size )
104- {
105- tempBuffer = ( byte [ ] ) temporaryBufferReference . Target ;
106- }
107- else
108- {
109- tempBuffer = new byte [ size ] ;
110- temporaryBufferReference = new WeakReference ( tempBuffer ) ;
111- }
112-
113- @event . Packet . CopyTo ( tempBuffer ) ;
114- payload = new ArraySegment < byte > ( tempBuffer , 0 , size ) ;
117+ tempBuffer = ( byte [ ] ) temporaryBufferReference . Target ;
115118 }
116119 else
117120 {
118- @event . Packet . CopyTo ( messageBuffer ) ;
119- payload = new ArraySegment < byte > ( messageBuffer , 0 , size ) ;
121+ tempBuffer = new byte [ size ] ;
122+ temporaryBufferReference = new WeakReference ( tempBuffer ) ;
120123 }
121-
122-
123- @event . Packet . Dispose ( ) ;
124-
125- return NetEventType . Data ;
126- }
127- case EventType . Timeout :
128- {
129- channelName = null ;
130- payload = new ArraySegment < byte > ( ) ;
131-
132- connectedEnetPeers . Remove ( @event . Peer . ID ) ;
133-
134- return NetEventType . Disconnect ;
124+
125+ @event . Packet . CopyTo ( tempBuffer ) ;
126+ payload = new ArraySegment < byte > ( tempBuffer , 0 , size ) ;
135127 }
136- default :
128+ else
137129 {
138- channelName = null ;
139- payload = new ArraySegment < byte > ( ) ;
140-
141- return NetEventType . Nothing ;
130+ @event . Packet . CopyTo ( messageBuffer ) ;
131+ payload = new ArraySegment < byte > ( messageBuffer , 0 , size ) ;
142132 }
133+
134+ @event . Packet . Dispose ( ) ;
135+
136+ return NetEventType . Data ;
137+ }
138+ case EventType . Timeout :
139+ {
140+ channelName = null ;
141+ payload = new ArraySegment < byte > ( ) ;
142+
143+ connectedEnetPeers . Remove ( @event . Peer . ID ) ;
144+
145+ return NetEventType . Disconnect ;
146+ }
147+ default :
148+ {
149+ channelName = null ;
150+ payload = new ArraySegment < byte > ( ) ;
151+
152+ return NetEventType . Nothing ;
143153 }
144- }
145- else
146- {
147- channelName = null ;
148- payload = new ArraySegment < byte > ( ) ;
149- clientId = 0 ;
150-
151- return NetEventType . Nothing ;
152154 }
153155 }
154156
155157 public override void StartClient ( )
156158 {
157159 host = new Host ( ) ;
158160
159- Address address = new Address ( ) ;
161+ host . Create ( 1 , MLAPI_CHANNELS . Length + Channels . Count ) ;
160162
163+ Address address = new Address ( ) ;
161164 address . Port = Port ;
162165 address . SetHost ( Address ) ;
163166
164- host . Create ( address , 1 ) ;
165-
166167 Peer serverPeer = host . Connect ( address , MLAPI_CHANNELS . Length + Channels . Count ) ;
167168
168169 serverPeerId = serverPeer . ID ;
@@ -171,14 +172,11 @@ public override void StartClient()
171172 public override void StartServer ( )
172173 {
173174 host = new Host ( ) ;
174-
175- host . SetChannelLimit ( MLAPI_CHANNELS . Length + Channels . Count ) ;
176175
177176 Address address = new Address ( ) ;
178-
179177 address . Port = Port ;
180178
181- host . Create ( address , MaxClients ) ;
179+ host . Create ( address , MaxClients , MLAPI_CHANNELS . Length + Channels . Count ) ;
182180 }
183181
184182 public override void DisconnectRemoteClient ( ulong clientId )
0 commit comments