Example #1
0
        public DiscoveryClient startDiscovery(TimeSpan span)
        {
            try
            {
                var endPoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);

                var discoveryClient = new DiscoveryClient(endPoint);

                discoveryClient.FindCompleted       += DiscoveryClient_FindCompleted;
                discoveryClient.FindProgressChanged += discoveryClient_FindProgressChanged;

                FindCriteria findCriteria = new FindCriteria();
                findCriteria.Duration   = span;
                findCriteria.MaxResults = int.MaxValue;
                findCriteria.ContractTypeNames.Add(new System.Xml.XmlQualifiedName("NetworkVideoTransmitter", "http://www.onvif.org/ver10/network/wsdl"));
                discoveryClient.FindAsync(findCriteria);

                this.OnRecoveryChange("", DiscoveryEvent.EventTypes.startEvent);

                System.Diagnostics.Trace.WriteLine("DiscoveryClient.startDiscovery O.K ...");

                return(discoveryClient);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine("DiscoveryServer.startDiscovery: " + ex.Message);
                return(null);
            }
        }
Example #2
0
        /// <summary>
        /// Starts a discovery process
        /// </summary>
        public void Find(DiscoveryType type = DiscoveryType.WsDiscovery)
        {
            ActivityServices.Clear();
#if !ANDROID
            switch (type)
            {
            case DiscoveryType.WsDiscovery:
                using (var wsBrowser = new DiscoveryClient(new UdpDiscoveryEndpoint()))
                {
                    wsBrowser.FindProgressChanged += WsBrowserFindProgressChanged;
                    wsBrowser.FindCompleted       += WsBrowserFindCompleted;
                    wsBrowser.FindAsync(new FindCriteria(typeof(IDiscovery)));
                }
                break;

            case DiscoveryType.Zeroconf:
            {
                var zcBrowser = new ServiceBrowser();
                zcBrowser.ServiceAdded += zcBrowser_ServiceAdded;
                zcBrowser.Browse("_am._tcp", "local");
            }
            break;
            }
#else
            Probe();
#endif
        }
Example #3
0
 void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 {
     discoveryClient.FindAsync(new FindCriteria(typeof(IExtDataService))
     {
         Duration = TimeSpan.FromSeconds(5)
     });
 }
Example #4
0
        private static DiscoveryClient BuildDiscoveryClient(string adapterId, DiscoveryVersion version)
        {
            var epDiscovery = new UdpDiscoveryEndpoint(version);
            var b           = (CustomBinding)epDiscovery.Binding;

            if (b == null)
            {
                return(null);
            }

            epDiscovery.TransportSettings.MulticastInterfaceId = adapterId;
            b.Elements.Insert(0, new MulticastCapabilitiesBindingElement(true));

            var discoveryClient = new DiscoveryClient(epDiscovery);

            discoveryClient.FindProgressChanged += DiscoveryClientFindProgressChanged;
            //discoveryClient.FindCompleted += DiscoveryClientFindCompleted;

            FindCriteria findCriteria = new FindCriteria
            {
                Duration   = TimeSpan.FromMinutes(5),
                MaxResults = int.MaxValue
            };

            foreach (var ctn in CtNs)
            {
                findCriteria.ContractTypeNames.Add(ctn);
            }

            discoveryClient.FindAsync(findCriteria);
            return(discoveryClient);
        }
    public static Task <FindResponse> FindTaskAsync(this DiscoveryClient discoveryClient, FindCriteria criteria)
    {
        if (discoveryClient == null)
        {
            throw new ArgumentNullException("discoveryClient");
        }
        TaskCompletionSource <FindResponse>   tcs = new TaskCompletionSource <FindResponse>(discoveryClient);
        EventHandler <FindCompletedEventArgs> completedHandler = null;

        completedHandler = delegate(object sender, FindCompletedEventArgs e)
        {
            AsyncCompatLibExtensions.HandleEapCompletion <FindResponse>(tcs, true, e, () => e.Result, delegate
            {
                discoveryClient.FindCompleted -= completedHandler;
            });
        };
        discoveryClient.FindCompleted += completedHandler;
        try
        {
            discoveryClient.FindAsync(criteria, tcs);
        }
        catch
        {
            discoveryClient.FindCompleted -= completedHandler;
            throw;
        }
        return(tcs.Task);
    }
        private void ProbeInitialServices(ServiceHost serviceHost)
        {
            var probe = new DiscoveryClient(UdpDiscoveryEndpoint ?? new UdpDiscoveryEndpoint());

            probe.FindProgressChanged += (_, args) => RegisterService(serviceHost, args.EndpointDiscoveryMetadata);
            probe.FindCompleted       += (_, args) => probe.Close();
            probe.FindAsync(ProbeCriteria ?? new FindCriteria());
        }
Example #7
0
        private void LocateExistingEndpoints()
        {
            m_DiscoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
            m_DiscoveryClient.FindProgressChanged += (s, e) => HandleOnlineAnnouncementReceived(e.EndpointDiscoveryMetadata);
            m_DiscoveryClient.FindCompleted       += OnFindCompleted;

            m_DiscoveryClient.FindAsync(new FindCriteria(typeof(IBootstrapEndpoint)));
        }
Example #8
0
 public void Probe(TimeSpan timeout = default(TimeSpan))
 {
     _discoveryClient.FindAsync(new FindCriteria(ServiceInterface)
     {
         MaxResults = timeout == TimeSpan.Zero ? 1 : int.MaxValue,
         Duration   = timeout == TimeSpan.Zero ? TimeSpan.MaxValue : timeout
     });
 }
Example #9
0
        private void RefreshTopology(object state)
        {
            // heartbeat - will remove any failing nodes
            Parallel.ForEach(topologyState.Keys, FindEndpointMetadata);

            var discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

            discoveryClient.FindProgressChanged += DiscoveryClientOnFindProgressChanged;
            discoveryClient.FindCompleted       += DiscoveryClientOnFindCompleted;
            discoveryClient.FindAsync(new FindCriteria(typeof(INodeStateService)), state);
        }
Example #10
0
    static void Main(string[] args)
    {
        var endPoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);

        var discoveryClient = new DiscoveryClient(endPoint);

        discoveryClient.FindProgressChanged += discoveryClient_FindProgressChanged;
        FindCriteria findCriteria = new FindCriteria();

        findCriteria.Duration   = TimeSpan.MaxValue;
        findCriteria.MaxResults = int.MaxValue;
        discoveryClient.FindAsync(findCriteria);
        Console.ReadKey();
    }
        public static IObservable <EndpointDiscoveryMetadata> GetServiceDiscoveryData <TServiceContract>()
        {
            var result          = new Subject <EndpointDiscoveryMetadata>();
            var discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

            discoveryClient.FindProgressChanged += (_, e) => result.OnNext(e.EndpointDiscoveryMetadata);
            discoveryClient.FindCompleted       += (_, e) =>
            {
                result.OnCompleted();
                discoveryClient.Close();
            };

            discoveryClient.FindAsync(new FindCriteria(typeof(TServiceContract)));
            return(result);
        }
Example #12
0
        static void FindCalculatorServiceAddress()
        {
            DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

            discoveryClient.FindCompleted       += new EventHandler <FindCompletedEventArgs>(ClientFindCompleted);
            discoveryClient.FindProgressChanged += new EventHandler <FindProgressChangedEventArgs>(ClientFindProgressChanged);

            Console.WriteLine("Finding ICalculatorServices endpoints asynchronously...\n");
            FindCriteria findCriteria = new FindCriteria(typeof(ICalculatorService));

            findCriteria.Duration = TimeSpan.FromSeconds(5);

            // Find ICalculatorService endpoint asynchronously. The results are returned asynchronously via events
            discoveryClient.FindAsync(findCriteria);
        }
Example #13
0
        //method that starts searching matching endpoints asynchrously
        private static void TryToFindServiceAsync()
        {
            DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

            discoveryClient.FindProgressChanged += new EventHandler <FindProgressChangedEventArgs>(DiscoveryClient_FindProgressChanged);
            discoveryClient.FindCompleted       += new EventHandler <FindCompletedEventArgs>(DiscoveryClient_FindCompleted);
            discoveryClient.FindAsync(new FindCriteria(typeof(IMakaoGameHostService))
            {
                Duration = TimeSpan.FromSeconds(10)
            });

            var logger = NLog.LogManager.GetCurrentClassLogger();

            logger.Info("Searching for host endpoint in async way started.");
        }
Example #14
0
        private static void TryToFindServiceAsync()
        {
            Console.WriteLine("Trying to find service");

            DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

            discoveryClient.FindProgressChanged += new
                                                   EventHandler <FindProgressChangedEventArgs>(DiscoveryClient_FindProgressChanged);
            discoveryClient.FindCompleted += new
                                             EventHandler <FindCompletedEventArgs>(DiscoveryClient_FindCompleted);
            discoveryClient.FindAsync(new FindCriteria(typeof(IMakaoGameHostService))
            {
                Duration = TimeSpan.FromSeconds(10)
            });
        }
    static void Main(string[] args)
    {
        var endPoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);

        var discoveryClient = new DiscoveryClient(endPoint);

        discoveryClient.FindProgressChanged += discoveryClient_FindProgressChanged;
        FindCriteria findCriteria = new FindCriteria();

        findCriteria.Duration   = TimeSpan.MaxValue;
        findCriteria.MaxResults = int.MaxValue;
        // Edit: optionally specify contract type, ONVIF v1.0
        findCriteria.ContractTypeNames.Add(new XmlQualifiedName("NetworkVideoTransmitter",
                                                                "http://www.onvif.org/ver10/network/wsdl"));
        discoveryClient.FindAsync(findCriteria);
        Console.ReadKey();
    }
Example #16
0
        public void Discover(int discoveryTimeOutMiliseconds, EventHandler <FindCompletedEventArgs> discoveryCompleted)
        {
            var          endPoint              = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);
            FindCriteria findCriteria          = new FindCriteria();
            var          contractTypeName      = "NetworkVideoTransmitter";
            var          contractTypeNamespace = "http://www.onvif.org/ver10/network/wsdl";

            // those parametes are defined by onvif standard
            findCriteria.ContractTypeNames.Add(new XmlQualifiedName(contractTypeName, contractTypeNamespace));

            var discoveryClient = new DiscoveryClient(endPoint);

            discoveryClient.FindProgressChanged += discoveryClient_FindProgressChanged;
            discoveryClient.FindCompleted       += discoveryCompleted;

            findCriteria.Duration   = TimeSpan.FromMilliseconds(discoveryTimeOutMiliseconds);
            findCriteria.MaxResults = int.MaxValue;
            discoveryClient.FindAsync(findCriteria);
        }
        private void findServiceButton_Click(object sender, EventArgs e)
        {
            tracer.Verb("ScreenCastControl::findServiceButton_Click(...)");

            //logger.Debug("findServiceButton_Click(...)");

            if (!finding)
            {
                var udpDiscoveryEndpoint = new UdpDiscoveryEndpoint();
                udpDiscoveryEndpoint.EndpointBehaviors.Add(new WcfDiscoveryAddressCustomEndpointBehavior());

                if (discoveryClient == null)
                {
                    discoveryClient = new DiscoveryClient(udpDiscoveryEndpoint);

                    discoveryClient.FindCompleted       += DiscoveryClient_FindCompleted;
                    discoveryClient.FindProgressChanged += DiscoveryClient_FindProgressChanged;
                }

                var criteria = new FindCriteria(typeof(IScreenCastService));
                criteria.Duration = TimeSpan.FromSeconds(5);


                finding = true;
                findServiceButton.Text = "_Cancel";
                labelStatus.Text       = "_Finding...";

                connectButton.Enabled    = false;
                hostsComboBox.Enabled    = false;
                hostsComboBox.DataSource = null;

                discoveryClient.FindAsync(criteria, this);
            }
            else
            {
                if (discoveryClient != null)
                {
                    discoveryClient.CancelAsync(this);
                    discoveryClient.Close();
                }
            }
        }
Example #18
0
        void _SearchONVIF()
        {
            var endPoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);

            var discoveryClient = new DiscoveryClient(endPoint);

            discoveryClient.FindProgressChanged += discoveryClient_FindProgressChanged;

            FindCriteria findCriteria = new FindCriteria
            {
                Duration   = new TimeSpan(0, 0, 10),
                MaxResults = int.MaxValue
            };

            // Edit: optionally specify contract type, ONVIF v1.0
            findCriteria.ContractTypeNames.Add(new XmlQualifiedName("NetworkVideoTransmitter",
                                                                    "http://www.onvif.org/ver10/network/wsdl"));

            discoveryClient.FindAsync(findCriteria);
            comboBox1.Invoke(new Action(() => { comboBox1.Items.Clear(); }));
        }
Example #19
0
 public async Task <EndpointAddress> Discover()
 {
     if (_isRunning)
     {
         _discoveryClient.CancelAsync(null);
     }
     return(await Task <EndpointAddress> .Factory.StartNew(() =>
     {
         _isRunning = true;
         _discoveryClient.FindAsync(new FindCriteria(typeof(IServerAppService)));
         while (true)
         {
             Thread.Sleep(100);
             if (!_isRunning)
             {
                 Logger.Debug("Service discovery returns endpoint {0}", _address);
                 return _address;
             }
         }
     }).ConfigureAwait(false));
 }
Example #20
0
        private void discover_Click(object sender, RoutedEventArgs e)
        {
            name.IsEnabled     = false;
            userType.IsEnabled = false;
            connect.IsEnabled  = false;
            statusWriter.WriteLine("Discovering Services...");

            discoveryCount = 0;

            // Setup function to call when discovery completed -- two different discovery processes needed to find the two different services
            subscriptionDC.FindCompleted += new EventHandler <FindCompletedEventArgs>(SubscriptionFindCompleted);
            approvalDC.FindCompleted     += new EventHandler <FindCompletedEventArgs>(ApprovalFindCompleted);

            // Start the discovery process for both services being looked for
            FindCriteria sfc = new FindCriteria(typeof(ISubscriptionService));
            FindCriteria afc = new FindCriteria(typeof(IApprovalProcess));

            sfc.Duration = new TimeSpan(0, 0, 2);
            afc.Duration = new TimeSpan(0, 0, 2);
            subscriptionDC.FindAsync(sfc);
            approvalDC.FindAsync(afc);
        }
Example #21
0
        private void btnProbe_Click(object sender, EventArgs e)
        {
            ProbeDialog dlg = new ProbeDialog();

            dlg.InitializeTypes(_types);
            dlg.InitializeScopes(_scopes);

            DialogResult result = dlg.ShowDialog();

            if (result == DialogResult.Cancel)
            {
                return;
            }

            SynchronizeParameters(dlg);

            InitializeDiscoveryClient(dlg.DiscoveryVersion);
            lvDevices.Items.Clear();

            FindCriteria request = new FindCriteria();

            request.ScopeMatchBy = new Uri("http://schemas.xmlsoap.org/ws/2005/04/discovery/rfc3986");

            foreach (ListViewItem item in dlg.TypesList.CheckedItems)
            {
                XmlQualifiedName type = new XmlQualifiedName(item.SubItems[0].Text, item.SubItems[1].Text);
                request.ContractTypeNames.Add(type);
            }

            foreach (ListViewItem item in dlg.ScopesList.CheckedItems)
            {
                request.Scopes.Add(new Uri((item.SubItems[0].Text)));
            }


            request.Duration = new TimeSpan(0, 0, 0, 10, 0);
            btnProbe.Enabled = false;
            _discoveryClient.FindAsync(request);
        }
Example #22
0
        static void Main(string[] args)
        {
            Console.WriteLine("Discovering devices...");
            var          endPoint              = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);
            FindCriteria findCriteria          = new FindCriteria();
            var          contractTypeName      = "NetworkVideoTransmitter";
            var          contractTypeNamespace = "http://www.onvif.org/ver10/network/wsdl";

            // those parametes are defined by onvif standard
            findCriteria.ContractTypeNames.Add(new XmlQualifiedName(contractTypeName, contractTypeNamespace));

            var discoveryClient = new DiscoveryClient(endPoint);

            discoveryClient.FindProgressChanged += discoveryClient_FindProgressChanged;
            discoveryClient.FindCompleted       += discoveryClient_FindCompleted;


            findCriteria.Duration   = TimeSpan.MaxValue;
            findCriteria.MaxResults = int.MaxValue;
            discoveryClient.FindAsync(findCriteria);

            Console.ReadKey();
        }
Example #23
0
        private void findServiceButton_Click(object sender, EventArgs e)
        {
            logger.Debug("\nFinding IRemoteDesktopService...");

            var udpDiscoveryEndpoint = new UdpDiscoveryEndpoint();

            udpDiscoveryEndpoint.EndpointBehaviors.Add(new WcfDiscoveryAddressCustomEndpointBehavior());

            DiscoveryClient discoveryClient = new DiscoveryClient(udpDiscoveryEndpoint);

            var criteria = new FindCriteria(typeof(IRemoteDesktopService));

            criteria.Duration = TimeSpan.FromSeconds(5);
            ProgressForm progress = new ProgressForm
            {
                StartPosition = FormStartPosition.CenterParent,
            };

            List <ComboBoxItem> hostItems = new List <ComboBoxItem>();

            discoveryClient.FindCompleted += (o, a) =>
            {
                logger.Debug("FindCompleted(...)");

                if (a.Cancelled)
                {
                    logger.Debug("Cancelled");
                }
                if (a.Error != null)
                {
                    logger.Debug(a.Error.ToString());
                }

                if (!a.Cancelled)
                {
                    var result = a.Result;
                    if (result != null)
                    {
                        foreach (var ep in result.Endpoints)
                        {
                            string address  = ep.Address.ToString();
                            string hostName = address;

                            var extensions = ep.Extensions;
                            if (extensions != null && extensions.Count > 0)
                            {
                                var hostElement = extensions.FirstOrDefault(el => el.Name == "HostName");
                                if (hostElement != null)
                                {
                                    hostName = hostElement.Value; // + " {" + address + "}";
                                }
                            }

                            logger.Debug(hostName);

                            hostItems.Add(new ComboBoxItem
                            {
                                Name = hostName,
                                Tag  = address,
                            });
                        }
                    }
                }

                hostsComboBox.DataSource    = hostItems;
                hostsComboBox.DisplayMember = "Name";

                progress.Close();
            };

            discoveryClient.FindProgressChanged += (o, a) =>
            {
                logger.Debug("FindProgressChanged(...) " + a.EndpointDiscoveryMetadata.Address.ToString());
            };


            progress.Shown += (o, a) =>
            {
                discoveryClient.FindAsync(criteria, this);
            };

            progress.FormClosed += (o, a) =>
            {
                logger.Debug("FormClosed(...)");

                if (discoveryClient != null)
                {
                    discoveryClient.CancelAsync(this);
                    discoveryClient.Close();
                }
            };

            progress.ShowDialog();
        }
Example #24
0
 public IDiscoveryManager Start()
 {
     dis.FindAsync(Criteria, userState);
     return(this);
 }