use of javax.jmdns.JmDNS in project JAirPort by froks.
the class JmmDNSImpl method unregisterService.
/*
* (non-Javadoc)
* @see javax.jmdns.JmmDNS#unregisterService(javax.jmdns.ServiceInfo)
*/
@Override
public void unregisterService(ServiceInfo info) {
synchronized (_services) {
for (JmDNS mDNS : _knownMDNS.values()) {
mDNS.unregisterService(info);
}
((ServiceInfoImpl) info).setDelegate(null);
_services.remove(info.getQualifiedName());
}
}
use of javax.jmdns.JmDNS in project JMRI by JMRI.
the class ZeroConfService method publish.
/**
* Start advertising the service.
*/
public void publish() {
if (!isPublished()) {
ZeroConfService.services.put(this.key(), this);
this.listeners.stream().forEach((listener) -> {
listener.serviceQueued(new ZeroConfServiceEvent(this, null));
});
boolean useIPv4 = ProfileUtils.getPreferences(ProfileManager.getDefault().getActiveProfile(), ZeroConfService.class, false).getBoolean(ZeroConfService.IPv4, true);
boolean useIPv6 = ProfileUtils.getPreferences(ProfileManager.getDefault().getActiveProfile(), ZeroConfService.class, false).getBoolean(ZeroConfService.IPv6, true);
for (JmDNS netService : ZeroConfService.netServices().values()) {
ZeroConfServiceEvent event;
ServiceInfo info;
try {
if (netService.getInetAddress() instanceof Inet6Address && !useIPv6) {
// Skip if address is IPv6 and should not be advertised on
log.debug("Ignoring IPv6 address {}", netService.getInetAddress().getHostAddress());
continue;
}
if (netService.getInetAddress() instanceof Inet4Address && !useIPv4) {
// Skip if address is IPv4 and should not be advertised on
log.debug("Ignoring IPv4 address {}", netService.getInetAddress().getHostAddress());
continue;
}
try {
log.debug("Publishing ZeroConfService for '{}' on {}", key(), netService.getInetAddress().getHostAddress());
} catch (IOException ex) {
log.debug("Publishing ZeroConfService for '{}' with IOException {}", key(), ex.getLocalizedMessage(), ex);
}
// JmDNS requires a 1-to-1 mapping of serviceInfo to InetAddress
if (!this.serviceInfos.containsKey(netService.getInetAddress())) {
try {
info = this.serviceInfo();
netService.registerService(info);
log.debug("Register service '{}' on {} successful.", this.key(), netService.getInetAddress().getHostAddress());
} catch (IllegalStateException ex) {
// thrown if the reference serviceInfo object is in use
try {
log.debug("Initial attempt to register '{}' on {} failed.", this.key(), netService.getInetAddress().getHostAddress());
info = this.addServiceInfo(netService);
log.debug("Retrying register '{}' on {}.", this.key(), netService.getInetAddress().getHostAddress());
netService.registerService(info);
} catch (IllegalStateException ex1) {
// thrown if service gets registered on interface by
// the networkListener before this loop on interfaces
// completes, so we only ensure a later notification
// is not posted continuing to next interface in list
log.debug("'{}' is already registered on {}.", this.key(), netService.getInetAddress().getHostAddress());
continue;
}
}
} else {
log.debug("skipping '{}' on {}, already in serviceInfos.", this.key(), netService.getInetAddress().getHostAddress());
}
event = new ZeroConfServiceEvent(this, netService);
} catch (IOException ex) {
log.error("Unable to publish service for '{}': {}", key(), ex.getMessage());
continue;
}
this.listeners.stream().forEach((listener) -> {
listener.servicePublished(event);
});
}
}
}
use of javax.jmdns.JmDNS in project EngineDriver by JMRI.
the class JmmDNSImpl method unregisterService.
/*
* (non-Javadoc)
* @see javax.jmdns.JmmDNS#unregisterService(javax.jmdns.ServiceInfo)
*/
@Override
public void unregisterService(ServiceInfo info) {
// We need to get the list out of the synchronized block to prevent dead locks
final JmDNS[] dnsArray = this.getDNS();
synchronized (_services) {
_services.remove(info.getQualifiedName());
for (JmDNS mDNS : dnsArray) {
mDNS.unregisterService(info);
}
((ServiceInfoImpl) info).setDelegate(null);
}
}
use of javax.jmdns.JmDNS in project EngineDriver by JMRI.
the class JmmDNSImpl method addServiceListener.
/*
* (non-Javadoc)
* @see javax.jmdns.JmmDNS#addServiceListener(java.lang.String, javax.jmdns.ServiceListener)
*/
@Override
public void addServiceListener(String type, ServiceListener listener) {
final String loType = type.toLowerCase();
List<ServiceListener> list = _serviceListeners.get(loType);
if (list == null) {
_serviceListeners.putIfAbsent(loType, new LinkedList<ServiceListener>());
list = _serviceListeners.get(loType);
}
if (list != null) {
synchronized (list) {
if (!list.contains(listener)) {
list.add(listener);
}
}
}
for (JmDNS mDNS : this.getDNS()) {
mDNS.addServiceListener(type, listener);
}
}
use of javax.jmdns.JmDNS in project smarthome by eclipse.
the class MDNSClientImpl method activate.
public void activate() {
for (InetAddress address : getAllInetAddresses()) {
try {
JmDNS jmdns = JmDNS.create(address, "JmDNS-IP-" + (jmdnsInstances.size() + 1));
jmdnsInstances.add(jmdns);
logger.debug("mDNS service has been started ({} for IP {})", jmdns.getName(), address.getHostAddress());
} catch (IOException e) {
logger.debug("JmDNS instantiation failed ({})!", address.getHostAddress());
}
}
}
Aggregations