| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | 
							- using System;
 
- using System.Net;
 
- using System.Collections.Generic;
 
- using System.Threading.Tasks;
 
- using MediaBrowser.Common.Net;
 
- using MediaBrowser.Model.Dlna;
 
- using Microsoft.Extensions.Logging;
 
- using System.Linq;
 
- namespace Mono.Nat
 
- {
 
-     public class NatManager : IDisposable
 
-     {
 
-         public event EventHandler<DeviceEventArgs> DeviceFound;
 
-         private List<ISearcher> controllers = new List<ISearcher>();
 
-         private ILogger Logger;
 
-         private IHttpClient HttpClient;
 
-         public NatManager(ILogger logger, IHttpClient httpClient)
 
-         {
 
-             Logger = logger;
 
-             HttpClient = httpClient;
 
-         }
 
-         private object _runSyncLock = new object();
 
-         public void StartDiscovery()
 
-         {
 
-             lock (_runSyncLock)
 
-             {
 
-                 if (controllers.Count > 0)
 
-                 {
 
-                     return;
 
-                 }
 
-                 controllers.Add(new PmpSearcher(Logger));
 
-                 foreach (var searcher in controllers)
 
-                 {
 
-                     searcher.DeviceFound += Searcher_DeviceFound;
 
-                 }
 
-             }
 
-         }
 
-         public void StopDiscovery()
 
-         {
 
-             lock (_runSyncLock)
 
-             {
 
-                 var disposables = controllers.OfType<IDisposable>().ToList();
 
-                 controllers.Clear();
 
-                 foreach (var disposable in disposables)
 
-                 {
 
-                     disposable.Dispose();
 
-                 }
 
-             }
 
-         }
 
-         public void Dispose()
 
-         {
 
-             StopDiscovery();
 
-         }
 
-         public Task Handle(IPAddress localAddress, UpnpDeviceInfo deviceInfo, IPEndPoint endpoint, NatProtocol protocol)
 
-         {
 
-             switch (protocol)
 
-             {
 
-                 case NatProtocol.Upnp:
 
-                     var searcher = new UpnpSearcher(Logger, HttpClient);
 
-                     searcher.DeviceFound += Searcher_DeviceFound;
 
-                     return searcher.Handle(localAddress, deviceInfo, endpoint);
 
-                 default:
 
-                     throw new ArgumentException("Unexpected protocol: " + protocol);
 
-             }
 
-         }
 
-         private void Searcher_DeviceFound(object sender, DeviceEventArgs e)
 
-         {
 
-             if (DeviceFound != null)
 
-             {
 
-                 DeviceFound(sender, e);
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |