2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 namespace Tizen.Network.Nsd
22 /// This class is used for managing network service discovery using DNSSD.
24 public class DnssdBrowser : INsdBrowser
26 private string _serviceType;
27 private uint _browserHandle;
28 private event EventHandler<DnssdServiceFoundEventArgs> _serviceFound;
29 private Interop.Nsd.Dnssd.ServiceFoundCallback _serviceFoundCallback;
32 /// This event is raised when a DNSSD service is found during service discovery.
34 public event EventHandler<DnssdServiceFoundEventArgs> ServiceFound
38 _serviceFound += value;
43 _serviceFound -= value;
48 /// A public constructor for DnssdBrowser class to create a DnssdBrowser instance for the given service type.
50 /// <param name="serviceType">The DNSSD service type</param>
51 public DnssdBrowser(string serviceType)
53 DnssdInitializer dnssdInit = Globals.s_threadDns.Value;
54 Log.Info(Globals.LogTag, "Initialize ThreadLocal<DnssdInitializer> instance = " + dnssdInit);
56 _serviceType = serviceType;
59 internal void StartDiscovery()
61 DnssdInitializer dnssdInit = Globals.s_threadDns.Value;
62 Log.Info(Globals.LogTag, "Initialize ThreadLocal<DnssdInitializer> instance = " + dnssdInit);
64 _serviceFoundCallback = (DnssdServiceState state, uint service, IntPtr userData) =>
66 if (_serviceFound != null)
68 Log.Info(Globals.LogTag, "Inside Service found callback");
69 DnssdService dnsService = new DnssdService(service);
70 _serviceFound(null, new DnssdServiceFoundEventArgs(state, dnsService));
74 int ret = Interop.Nsd.Dnssd.StartBrowsing(_serviceType, out _browserHandle, _serviceFoundCallback, IntPtr.Zero);
75 if (ret != (int)DnssdError.None)
77 Log.Error(Globals.LogTag, "Failed to discover Dnssd remote service, Error - " + (DnssdError)ret);
78 NsdErrorFactory.ThrowDnssdException(ret);
82 internal void StopDiscovery()
84 int ret = Interop.Nsd.Dnssd.StopBrowsing(_browserHandle);
85 if (ret != (int)DnssdError.None)
87 Log.Error(Globals.LogTag, "Failed to stop discovery of Dnssd remote service, Error - " + (DnssdError)ret);
88 NsdErrorFactory.ThrowDnssdException(ret);