public async Task <PortCheckResult[]> CheckAsync() { var peercast = Application.PeerCast; var endpoints = peercast.OutputListeners .Where(listener => (listener.GlobalOutputAccepts & OutputStreamType.Relay) != 0) .Select(listener => listener.LocalEndPoint) .GroupBy(ep => ep.Address); return(await Task.WhenAll( endpoints.Select(group => { var target = TargetUriV4; switch (group.Key.AddressFamily) { case AddressFamily.InterNetworkV6: target = TargetUriV6; break; case AddressFamily.InterNetwork: default: target = TargetUriV4; break; } var checker = new PCPPortChecker(peercast.SessionID, target, group.Key, group.Select(ep => ep.Port)); return checker.RunAsync(); }) ).ConfigureAwait(false)); }
public async Task<PortCheckResult> CheckAsync() { var peercast = Application.PeerCast; var ports = peercast.OutputListeners .Where( listener => (listener.GlobalOutputAccepts & OutputStreamType.Relay)!=0) .Select(listener => listener.LocalEndPoint.Port); var checker = new PCPPortChecker(peercast.SessionID, TargetUri, ports); return await checker.RunAsync(); }