private void waitForInfoData(ServiceInfo info, long timeout) { synchronized (info) { long loops = (timeout / 200L); if (loops < 1) { loops = 1; } for (int i = 0; i < loops; i++) { if (info.hasData()) { break; } try { info.wait(200); } catch (final InterruptedException e) { /* Stub */ } } } }
private void waitForInfoData(ServiceInfo info, long timeout) { synchronized (info) { long loops = (timeout / 200L); if (loops < 1) { loops = 1; } for (int i = 0; i < loops; i++) { if (info.hasData()) { break; } try { info.wait(200); } catch (final InterruptedException e) { /* Stub */ } } } }
private void waitForInfoData(ServiceInfo info, long timeout) { synchronized (info) { long loops = (timeout / 200L); if (loops < 1) { loops = 1; } for (int i = 0; i < loops; i++) { if (info.hasData()) { break; } try { info.wait(200); } catch (final InterruptedException e) { /* Stub */ } } } }
private void waitForInfoData(ServiceInfo info, long timeout) { synchronized (info) { long loops = (timeout / 200L); if (loops < 1) { loops = 1; } for (int i = 0; i < loops; i++) { if (info.hasData()) { break; } try { info.wait(200); } catch (final InterruptedException e) { /* Stub */ } } } }
void handleServiceResolved(ServiceEvent event) { List<ServiceListenerStatus> list = _serviceListeners.get(event.getType().toLowerCase()); final List<ServiceListenerStatus> listCopy; if ((list != null) && (!list.isEmpty())) { if ((event.getInfo() != null) && event.getInfo().hasData()) { final ServiceEvent localEvent = event; synchronized (list) { listCopy = new ArrayList<ServiceListenerStatus>(list); } for (final ServiceListenerStatus listener : listCopy) { _executor.submit(new Runnable() { /** {@inheritDoc} */ @Override public void run() { listener.serviceResolved(localEvent); } }); } } } }
void handleServiceResolved(ServiceEvent event) { List<ServiceListenerStatus> list = _serviceListeners.get(event.getType().toLowerCase()); final List<ServiceListenerStatus> listCopy; if ((list != null) && (!list.isEmpty())) { if ((event.getInfo() != null) && event.getInfo().hasData()) { final ServiceEvent localEvent = event; synchronized (list) { listCopy = new ArrayList<ServiceListenerStatus>(list); } for (final ServiceListenerStatus listener : listCopy) { _executor.submit(new Runnable() { /** {@inheritDoc} */ @Override public void run() { listener.serviceResolved(localEvent); } }); } } } }
void handleServiceResolved(ServiceEvent event) { List<ServiceListenerStatus> list = _serviceListeners.get(event.getType().toLowerCase()); final List<ServiceListenerStatus> listCopy; if ((list != null) && (!list.isEmpty())) { if ((event.getInfo() != null) && event.getInfo().hasData()) { final ServiceEvent localEvent = event; synchronized (list) { listCopy = new ArrayList<ServiceListenerStatus>(list); } for (final ServiceListenerStatus listener : listCopy) { _executor.submit(new Runnable() { /** {@inheritDoc} */ @Override public void run() { listener.serviceResolved(localEvent); } }); } } } }
void handleServiceResolved(ServiceEvent event) { List<ServiceListenerStatus> list = _serviceListeners.get(event.getType().toLowerCase()); final List<ServiceListenerStatus> listCopy; if ((list != null) && (!list.isEmpty())) { if ((event.getInfo() != null) && event.getInfo().hasData()) { final ServiceEvent localEvent = event; synchronized (list) { listCopy = new ArrayList<ServiceListenerStatus>(list); } for (final ServiceListenerStatus listener : listCopy) { _executor.submit(new Runnable() { /** {@inheritDoc} */ @Override public void run() { listener.serviceResolved(localEvent); } }); } } } }
/** * Request service information. The information about the service is requested * and the ServiceListener.resolveService method is called as soon as it is available. * * @param type full qualified service type, such as <code>_http._tcp.local.</code> . * @param name unqualified service name, such as <code>foobar</code> . * @param timeout timeout in milliseconds */ public void requestServiceInfo(String type, String name, int timeout) { registerServiceType(type); ServiceInfo info = new ServiceInfo(type, name); new ServiceInfoResolver(info).start(); try { long end = System.currentTimeMillis() + timeout; long delay; synchronized (info) { while (!info.hasData() && (delay = end - System.currentTimeMillis()) > 0) { info.wait(delay); } } } catch (InterruptedException e) { // empty } }
/** * A service has been resolved. Its details are now available in the ServiceInfo record.<br/> * <b>Note:</b>This call back will never be called if the service does not resolve.<br/> * * @param event * The ServiceEvent providing the name, the fully qualified type of the service, and the service info record. */ synchronized void serviceResolved(ServiceEvent event) { ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { String qualifiedName = event.getName() + "." + event.getType(); ServiceInfo previousServiceInfo = _addedServices.get(qualifiedName); if (!_sameInfo(info, previousServiceInfo)) { if (null == previousServiceInfo) { if (null == _addedServices.putIfAbsent(qualifiedName, info.clone())) { this.getListener().serviceResolved(event); } } else { if (_addedServices.replace(qualifiedName, previousServiceInfo, info.clone())) { this.getListener().serviceResolved(event); } } } else { logger.finer("Service Resolved called for a service already resolved: " + event); } } else { logger.warning("Service Resolved called for an unresolved event: " + event); } }
/** * A service has been resolved. Its details are now available in the ServiceInfo record.<br/> * <b>Note:</b>This call back will never be called if the service does not resolve.<br/> * * @param event * The ServiceEvent providing the name, the fully qualified type of the service, and the service info record. */ synchronized void serviceResolved(ServiceEvent event) { ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { String qualifiedName = event.getName() + "." + event.getType(); ServiceInfo previousServiceInfo = _addedServices.get(qualifiedName); if (!_sameInfo(info, previousServiceInfo)) { if (null == previousServiceInfo) { if (null == _addedServices.putIfAbsent(qualifiedName, info.clone())) { this.getListener().serviceResolved(event); } } else { if (_addedServices.replace(qualifiedName, previousServiceInfo, info.clone())) { this.getListener().serviceResolved(event); } } } else { logger.finer("Service Resolved called for a service already resolved: " + event); } } else { logger.warning("Service Resolved called for an unresolved event: " + event); } }
/** * A service has been added. * * @param event * service event */ @Override public void serviceAdded(ServiceEvent event) { synchronized (this) { ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { _infos.put(event.getName(), info); } else { String subtype = (info != null ? info.getSubtype() : ""); info = ((JmDNSImpl) event.getDNS()).resolveServiceInfo(event.getType(), event.getName(), subtype, true); if (info != null) { _infos.put(event.getName(), info); } else { _events.put(event.getName(), event); } } } }
/** * A service has been added. * * @param event * service event */ @Override public void serviceAdded(ServiceEvent event) { synchronized (this) { ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { _infos.put(event.getName(), info); } else { String subtype = (info != null ? info.getSubtype() : ""); info = ((JmDNSImpl) event.getDNS()).resolveServiceInfo(event.getType(), event.getName(), subtype, true); if (info != null) { _infos.put(event.getName(), info); } else { _events.put(event.getName(), event); } } } }
/** * A service has been added. * * @param event * service event */ @Override public void serviceAdded(ServiceEvent event) { synchronized (this) { ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { _infos.put(event.getName(), info); } else { String subtype = (info != null ? info.getSubtype() : ""); info = ((JmDNSImpl) event.getDNS()).resolveServiceInfo(event.getType(), event.getName(), subtype, true); if (info != null) { _infos.put(event.getName(), info); } else { _events.put(event.getName(), event); } } } }
/** * A service has been added. * * @param event * service event */ @Override public void serviceAdded(ServiceEvent event) { synchronized (this) { ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { _infos.put(event.getName(), info); } else { String subtype = (info != null ? info.getSubtype() : ""); info = ((JmDNSImpl) event.getDNS()).resolveServiceInfo(event.getType(), event.getName(), subtype, true); if (info != null) { _infos.put(event.getName(), info); } else { _events.put(event.getName(), event); } } } }
/** * A service has been added.<br/> * <b>Note:</b>This event is only the service added event. The service info associated with this event does not include resolution information.<br/> * To get the full resolved information you need to listen to {@link #serviceResolved(ServiceEvent)} or call {@link JmDNS#getServiceInfo(String, String, long)} * * <pre> * ServiceInfo info = event.getDNS().getServiceInfo(event.getType(), event.getName()) * </pre> * <p> * Please note that service resolution may take a few second to resolve. * </p> * * @param event * The ServiceEvent providing the name and fully qualified type of the service. */ void serviceAdded(ServiceEvent event) { String qualifiedName = event.getName() + "." + event.getType(); if (null == _addedServices.putIfAbsent(qualifiedName, event.getInfo().clone())) { this.getListener().serviceAdded(event); ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { this.getListener().serviceResolved(event); } } else { logger.finer("Service Added called for a service already added: " + event); } }
/** * A service has been added.<br/> * <b>Note:</b>This event is only the service added event. The service info associated with this event does not include resolution information.<br/> * To get the full resolved information you need to listen to {@link #serviceResolved(ServiceEvent)} or call {@link JmDNS#getServiceInfo(String, String, long)} * * <pre> * ServiceInfo info = event.getDNS().getServiceInfo(event.getType(), event.getName()) * </pre> * <p> * Please note that service resolution may take a few second to resolve. * </p> * * @param event * The ServiceEvent providing the name and fully qualified type of the service. */ void serviceAdded(ServiceEvent event) { String qualifiedName = event.getName() + "." + event.getType(); if (null == _addedServices.putIfAbsent(qualifiedName, event.getInfo().clone())) { this.getListener().serviceAdded(event); ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { this.getListener().serviceResolved(event); } } else { logger.debug("Service Added called for a service already added: {}", event); } }
/** * A service has been added.<br/> * <b>Note:</b>This event is only the service added event. The service info associated with this event does not include resolution information.<br/> * To get the full resolved information you need to listen to {@link #serviceResolved(ServiceEvent)} or call {@link JmDNS#getServiceInfo(String, String, long)} * * <pre> * ServiceInfo info = event.getDNS().getServiceInfo(event.getType(), event.getName()) * </pre> * <p> * Please note that service resolution may take a few second to resolve. * </p> * * @param event * The ServiceEvent providing the name and fully qualified type of the service. */ void serviceAdded(ServiceEvent event) { String qualifiedName = event.getName() + "." + event.getType(); if (null == _addedServices.putIfAbsent(qualifiedName, event.getInfo().clone())) { this.getListener().serviceAdded(event); ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { this.getListener().serviceResolved(event); } } else { logger.finer("Service Added called for a service already added: " + event); } }
/** * A service has been added.<br/> * <b>Note:</b>This event is only the service added event. The service info associated with this event does not include resolution information.<br/> * To get the full resolved information you need to listen to {@link #serviceResolved(ServiceEvent)} or call {@link JmDNS#getServiceInfo(String, String, long)} * * <pre> * ServiceInfo info = event.getDNS().getServiceInfo(event.getType(), event.getName()) * </pre> * <p> * Please note that service resolution may take a few second to resolve. * </p> * * @param event * The ServiceEvent providing the name and fully qualified type of the service. */ void serviceAdded(ServiceEvent event) { String qualifiedName = event.getName() + "." + event.getType(); if (null == _addedServices.putIfAbsent(qualifiedName, event.getInfo().clone())) { this.getListener().serviceAdded(event); ServiceInfo info = event.getInfo(); if ((info != null) && (info.hasData())) { this.getListener().serviceResolved(event); } } else { logger.finer("Service Added called for a service already added: " + event); } }