/// <summary> /// Initializes a new instance of the <see cref="DeviceDiscovery"/> class. /// </summary> public DeviceDiscovery(short port, string messageToCast) { try { Port = port; MessageToCast = messageToCast; // Register all providers // foreach (var assembly in Directory.GetFiles(".", "*Mono.Zeroconf.Providers.*.dll", SearchOption.AllDirectories)) new Publish().GacInstall(Path.GetFullPath(assembly)); _service = new RegisterService() { Name = MessageToCast ?? Environment.MachineName, RegType = "_test._tcp", ReplyDomain = "local.", Port = Port }; } catch (Exception e) { throw e; } }
/// <summary> /// Start new broadcast service /// </summary> /// <param name="type">Type of discovery</param> /// <param name="nameToBroadcast">The name of the service that needs to be broadcasted</param> /// <param name="physicalLocation">The physical location of the service that needs to be broadcasted</param> /// <param name="code">code to be broadcasted (e.g. device id)</param> /// <param name="addressToBroadcast">The address of the service that needs to be broadcasted</param> public void Start( DiscoveryType type, string nameToBroadcast, string physicalLocation, string code, Uri addressToBroadcast) { DiscoveryType = type; switch ( DiscoveryType ) { case DiscoveryType.WsDiscovery: { Ip = Net.GetIp( IpType.All ); Port = 7985; Address = "http://" + Ip + ":" + Port + "/"; _discoveryHost = new ServiceHost( new DiscoveyService() ); var serviceEndpoint = _discoveryHost.AddServiceEndpoint( typeof( IDiscovery ), new WebHttpBinding(), Net.GetUrl( Ip, Port, "" ) ); serviceEndpoint.Behaviors.Add( new WebHttpBehavior() ); var broadcaster = new EndpointDiscoveryBehavior(); broadcaster.Extensions.Add( nameToBroadcast.ToXElement<string>() ); broadcaster.Extensions.Add( physicalLocation.ToXElement<string>() ); broadcaster.Extensions.Add( addressToBroadcast.ToString().ToXElement<string>() ); broadcaster.Extensions.Add( code.ToXElement<string>() ); serviceEndpoint.Behaviors.Add( broadcaster ); _discoveryHost.Description.Behaviors.Add( new ServiceDiscoveryBehavior() ); _discoveryHost.Description.Endpoints.Add( new UdpDiscoveryEndpoint() ); _discoveryHost.Open(); IsRunning = true; Debug.WriteLine( DiscoveryType.ToString() + " is started" ); } break; case DiscoveryType.Zeroconf: { _service = new RegisterService { Name = nameToBroadcast, RegType = "_am._tcp", ReplyDomain = "local", Port = 3689 }; // TxtRecords are optional var txtRecord = new TxtRecord { { "name", nameToBroadcast }, { "addr", addressToBroadcast.ToString() }, { "loc", physicalLocation }, { "code", code } }; _service.TxtRecord = txtRecord; _service.Response += service_Response; _service.Register(); Debug.WriteLine(DiscoveryType.ToString() + " is started"); } break; } }