/// <inheritdoc/> public async Task <INetworkPeer> CreateConnectedNetworkPeerAsync( IPEndPoint peerEndPoint, NetworkPeerConnectionParameters parameters = null, NetworkPeerDisposer networkPeerDisposer = null) { Guard.NotNull(peerEndPoint, nameof(peerEndPoint)); Action <INetworkPeer> onDisconnected = null; if (networkPeerDisposer != null) { onDisconnected = networkPeerDisposer.OnPeerDisconnectedHandler; } var peer = new NetworkPeer(peerEndPoint, this.network, parameters, this, this.dateTimeProvider, this.loggerFactory, this.selfEndpointTracker, this.asyncProvider, onDisconnected, this.onSendingMessage); try { await peer.ConnectAsync(peer.ConnectionParameters.ConnectCancellation).ConfigureAwait(false); networkPeerDisposer?.AddPeer(peer); } catch { peer.Dispose(); throw; } return(peer); }
/// <inheritdoc/> public INetworkPeer CreateNetworkPeer(TcpClient client, NetworkPeerConnectionParameters parameters = null, NetworkPeerDisposer networkPeerDisposer = null) { Guard.NotNull(client, nameof(client)); Action <INetworkPeer> onDisconnected = null; if (networkPeerDisposer != null) { onDisconnected = networkPeerDisposer.OnPeerDisconnectedHandler; } var peer = new NetworkPeer((IPEndPoint)client.Client.RemoteEndPoint, this.network, parameters, client, this.dateTimeProvider, this, this.loggerFactory, this.selfEndpointTracker, this.asyncProvider, onDisconnected, this.onSendingMessage); networkPeerDisposer?.AddPeer(peer); return(peer); }