@@ -16,6 +16,7 @@ public sealed class NetClient : NetBase
16
16
private int _connectTimer ;
17
17
private ulong _connectId ;
18
18
private readonly string _connectKey ;
19
+ private readonly object _connectionCloseLock = new object ( ) ;
19
20
20
21
public NetClient ( INetEventListener listener , string connectKey ) : base ( listener )
21
22
{
@@ -51,29 +52,36 @@ public bool IsConnected
51
52
52
53
private void CloseConnection ( bool force , string info )
53
54
{
54
- //Close threads
55
- base . Stop ( ) ;
56
-
57
- //Send goodbye
58
- if ( _peer != null && ! force && _connected )
55
+ lock ( _connectionCloseLock )
59
56
{
60
- //Send disconnect data
61
- var disconnectPacket = NetPacket . CreateRawPacket ( PacketProperty . Disconnect , 8 ) ;
62
- FastBitConverter . GetBytes ( disconnectPacket , 1 , _connectId ) ;
63
- _peer . SendRawData ( disconnectPacket ) ;
64
- }
57
+ //Nothing to do
58
+ if ( ! IsRunning )
59
+ return ;
65
60
66
- //Clear data
67
- _peer = null ;
68
- _connected = false ;
69
- _connectTimer = 0 ;
70
- _connectAttempts = 0 ;
71
- SocketClearPeers ( ) ;
61
+ //Send goodbye
62
+ if ( _peer != null && ! force && _connected )
63
+ {
64
+ //Send disconnect data
65
+ var disconnectPacket = NetPacket . CreateRawPacket ( PacketProperty . Disconnect , 8 ) ;
66
+ FastBitConverter . GetBytes ( disconnectPacket , 1 , _connectId ) ;
67
+ _peer . SendRawData ( disconnectPacket ) ;
68
+ }
72
69
73
- //Send event to Listener
74
- var netEvent = CreateEvent ( NetEventType . Disconnect ) ;
75
- netEvent . AdditionalInfo = info ;
76
- EnqueueEvent ( netEvent ) ;
70
+ //Close threads and socket close
71
+ base . Stop ( ) ;
72
+
73
+ //Clear data
74
+ _peer = null ;
75
+ _connected = false ;
76
+ _connectTimer = 0 ;
77
+ _connectAttempts = 0 ;
78
+ SocketClearPeers ( ) ;
79
+
80
+ //Send event to Listener
81
+ var netEvent = CreateEvent ( NetEventType . Disconnect ) ;
82
+ netEvent . AdditionalInfo = info ;
83
+ EnqueueEvent ( netEvent ) ;
84
+ }
77
85
}
78
86
79
87
/// <summary>
0 commit comments