/// <summary> /// Disconnects from the remote server and cleans up resources /// </summary> /// <param name="e">An exception if one occurred</param> public void Disconnect(Exception e = null) { _reader?.Stop(); _reader = null; _writer?.Stop(); _writer = null; _networkStream?.Dispose(); _networkStream = null; _client?.Close(); _client = null; OnDisconnected(e); }
/// <summary> /// Creates the TcpClientReader and TcpClientWriter /// </summary> /// <param name="remoteAddress">The remote server address</param> private void FinalizeConnection(IPAddress remoteAddress) { _networkStream = _client.GetStream(); _reader = new TcpClientReader(_client); _reader.OnException += Disconnect; _reader.OnMessageReceived += OnMessageReceived; _reader.Start(); _writer = new TcpClientWriter(_client); _writer.OnException += Disconnect; _writer.OnMessageSent += () => { MessageSent?.Invoke(this); }; _writer.Start(); if (string.IsNullOrEmpty(Name)) { Name = _client.Client.RemoteEndPoint.As <IPEndPoint>()?.Address.ToString() ?? ""; } }
/// <summary> /// Creates the TcpClientReader and TcpClientWriter /// </summary> /// <param name="remoteEndPoint">The remote server address</param> private void FinalizeConnection(IPEndPoint remoteEndPoint) { _networkStream = _client.GetStream(); _reader = new TcpClientReader(_client); _reader.OnException += Disconnect; _reader.OnMessageReceived += OnMessageReceived; _reader.Start(); _writer = new TcpClientWriter(_client); _writer.OnException += Disconnect; _writer.OnMessageSent += (message) => { DataSent?.Invoke(this, message); }; _writer.Start(); //Name = Guid.NewGuid().ToString() + "." + _client.Client.RemoteEndPoint.As<IPEndPoint>()?.Address.ToString() ?? ""; Name = RemoteEndPoint.ToString(); //var ipEndPoint = RemoteEndPoint; //if (ipEndPoint != null) // Name = ipEndPoint.Address.ToString() + ":" + ipEndPoint.Port.ToString(); }
/// <summary> /// Disconnects from the remote server and cleans up resources /// </summary> /// <param name="e">An exception if one occurred</param> public void Disconnect(Exception e = null) { if (_client == null) { return; } //var remoteEndPoint = _client.Client.RemoteEndPoint.As<IPEndPoint>(); //retain a reference _reader?.Stop(); _reader = null; _writer?.Stop(); _writer = null; _networkStream?.Dispose(); _networkStream = null; #if NETSTANDARD1_3 || NETSTANDARD1_4 _client?.Dispose(); #else _client?.Close(); #endif _client = null; OnDisconnected(RemoteEndPoint, e); }