private void ProcessDisconnect(SocketAsyncEventArgs e) { if (_isConnected) { _isConnected = false; ClientToken clientToken = (ClientToken)(e != null ? e.UserToken : _clientToken); clientToken.Close(); //Fire Disconnected event if (Disconnected != null) { if (CallDisconnectedAsync) { Disconnected.BeginInvoke(this, r => Disconnected.EndInvoke(r), null); } else { Disconnected(this); } } } }