public NetworkInterfaceHandler(ServiceBrowser serviceBrowser, NetworkInterface networkInterface) { ServiceBrowser = serviceBrowser; NetworkInterface = networkInterface; _index = NetworkInterface.Information.GetIPProperties().GetIPv4Properties().Index; _queryTimer = new Timer(OnQueryTimerElapsed); }
private void RemoveService(Name name) { ServiceInfo service; _serviceInfos.TryGetValue(name, out service); if (service != null) { _serviceInfos.Remove(name); _serviceHandlers[name.SubName(1)].ServiceInfos.Remove(service); if (service.IsComplete) { ServiceBrowser.OnServiceRemoved(service); } if (service.HostName != null) { ClearServiceHostInfo(service); } } }
public void Disable() { if (!_isEnabled) { return; } lock (this) { _isEnabled = false; StopQuery(); foreach (var serviceHandlerKV in _serviceHandlers) { ServiceHandler serviceHandler = serviceHandlerKV.Value; serviceHandler.ServiceInfos.Clear(); } _socket.Dispose(); _socket = null; foreach (var serviceKV in _serviceInfos) { ServiceInfo service = serviceKV.Value; if (service.IsComplete) { ServiceBrowser.OnServiceRemoved(service); } } _serviceInfos.Clear(); _hostInfos.Clear(); } }
private void HandlePacketServiceInfos() { foreach (var serviceKV in _packetServiceInfos) { Name packetName = serviceKV.Key; ServiceInfo packetService = serviceKV.Value; if (packetService == null) { RemoveService(packetName); } else { bool modified = false; bool wasComplete = false; ServiceInfo service; _serviceInfos.TryGetValue(packetName, out service); if (service == null) { service = packetService; _serviceInfos.Add(packetName, service); _serviceHandlers[packetName.SubName(1)].ServiceInfos.Add(service); if (service.HostName != null) { AddServiceHostInfo(service); } modified = true; } else { service.OpenQueryCount = 0; wasComplete = service.IsComplete; if (packetService.Port != -1 && service.Port != packetService.Port) { service.Port = packetService.Port; modified = true; } if (packetService.Name.ToString() != service.Name.ToString()) { service.Name = packetService.Name; modified = true; } if (packetService.Txt != null && (service.Txt == null || !packetService.Txt.SequenceEqual(service.Txt))) { service.Txt = packetService.Txt; modified = true; } if (packetService.HostName != null && (service.HostName == null || service.HostName.ToString() != packetService.HostName.ToString())) { if (service.HostName != null) { ClearServiceHostInfo(service); } service.HostName = packetService.HostName; AddServiceHostInfo(service); modified = true; } if (packetService.Addresses != null) { service.Addresses = packetService.Addresses; modified = true; } } if (modified) { if (wasComplete != service.IsComplete) { if (wasComplete) { ServiceBrowser.OnServiceRemoved(service); } else { ServiceBrowser.OnServiceAdded(service); } } else if (service.IsComplete) { ServiceBrowser.OnServiceChanged(service); } } } } }