@@ -168,10 +168,17 @@ protected override void StartServerInternal()
168168
169169 void StartHostLoopback ( )
170170 {
171+ if ( _isHostLoopback )
172+ return ;
173+
171174 _isHostLoopback = true ;
172175
173- _connections . Add ( new Connection ( LOOPBACK_CONNECTION_ID ) ) ;
174- onConnected ? . Invoke ( new Connection ( LOOPBACK_CONNECTION_ID ) , true ) ;
176+ var connection = new Connection ( LOOPBACK_CONNECTION_ID ) ;
177+ if ( ! _connections . Contains ( connection ) )
178+ {
179+ _connections . Add ( connection ) ;
180+ onConnected ? . Invoke ( connection , true ) ;
181+ }
175182
176183 clientState = ConnectionState . Connected ;
177184 onConnected ? . Invoke ( new Connection ( 0 ) , false ) ;
@@ -190,26 +197,34 @@ public void Listen(ushort port)
190197
191198 _server = new EOSServer ( ) ;
192199 _server . Initialize ( this ) ;
200+ _server . onDataReceived += OnServerData ;
201+ _server . onRemoteConnected += OnRemoteConnected ;
202+ _server . onRemoteDisconnected += OnRemoteDisconnected ;
193203
194204 if ( _server . Listen ( ) )
195205 {
196206 listenerState = ConnectionState . Connected ;
197207 }
198208 else
199209 {
210+ _server . onDataReceived -= OnServerData ;
211+ _server . onRemoteConnected -= OnRemoteConnected ;
212+ _server . onRemoteDisconnected -= OnRemoteDisconnected ;
213+ _server = null ;
214+ _connections . Clear ( ) ;
200215 listenerState = ConnectionState . Disconnecting ;
201216 listenerState = ConnectionState . Disconnected ;
202217 }
203-
204- _server . onDataReceived += OnServerData ;
205- _server . onRemoteConnected += OnRemoteConnected ;
206- _server . onRemoteDisconnected += OnRemoteDisconnected ;
207218 }
208219
209220 void OnRemoteConnected ( int connectionId )
210221 {
211- _connections . Add ( new Connection ( connectionId ) ) ;
212- onConnected ? . Invoke ( new Connection ( connectionId ) , true ) ;
222+ var connection = new Connection ( connectionId ) ;
223+ if ( _connections . Contains ( connection ) )
224+ return ;
225+
226+ _connections . Add ( connection ) ;
227+ onConnected ? . Invoke ( connection , true ) ;
213228 }
214229
215230 void OnRemoteDisconnected ( int connectionId , DisconnectReason reason )
@@ -232,6 +247,14 @@ public void StopListening()
232247 listenerState = ConnectionState . Disconnecting ;
233248
234249 _server ? . Stop ( ) ;
250+ if ( _server != null )
251+ {
252+ _server . onDataReceived -= OnServerData ;
253+ _server . onRemoteConnected -= OnRemoteConnected ;
254+ _server . onRemoteDisconnected -= OnRemoteDisconnected ;
255+ }
256+
257+ _connections . Clear ( ) ;
235258 listenerState = ConnectionState . Disconnected ;
236259 _server = null ;
237260 _isHostLoopback = false ;
0 commit comments