JmmDNSImpl
Date: 2017-02-10

javax.jmdns.impl

## Class JmmDNSImpl

- java.lang.Object
- - javax.jmdns.impl.JmmDNSImpl

- All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.util.EventListener, ServiceInfoImpl.Delegate, JmmDNS, NetworkTopologyListener

      public class JmmDNSImpl
      extends java.lang.Object
      implements JmmDNS, NetworkTopologyListener, ServiceInfoImpl.Delegate

  This class enable multihomming mDNS. It will open a mDNS per IP address of the machine.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface javax.jmdns.JmmDNS

      `JmmDNS.Factory`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JmmDNSImpl()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addNetworkTopologyListener(NetworkTopologyListener listener)` Listen to network changes.
    `void` | `addServiceListener(java.lang.String type, ServiceListener listener)` Listen for services of a given type.
    `void` | `addServiceTypeListener(ServiceTypeListener listener)` Listen for service types.
    `void` | `close()`
    `java.lang.String[]` | `getHostNames()` Return the list HostName associated with this JmmDNS instance.
    `java.net.InetAddress[]` | `getInterfaces()` Return the list of addresses of the interface to which this instance of JmmDNS is bound.
    `java.lang.String[]` | `getNames()` Return the names of the JmDNS instances.
    `ServiceInfo[]` | `getServiceInfos(java.lang.String type, java.lang.String name)` Get service information.
    `ServiceInfo[]` | `getServiceInfos(java.lang.String type, java.lang.String name, boolean persistent)` Get service information.
    `ServiceInfo[]` | `getServiceInfos(java.lang.String type, java.lang.String name, boolean persistent, long timeout)` Get service information.
    `ServiceInfo[]` | `getServiceInfos(java.lang.String type, java.lang.String name, long timeout)` Get service information.
    `void` | `inetAddressAdded(NetworkTopologyEvent event)` A network address has been added.
    `void` | `inetAddressRemoved(NetworkTopologyEvent event)` A network address has been removed.
    `ServiceInfo[]` | `list(java.lang.String type)` Returns a list of service infos of the specified type.
    `ServiceInfo[]` | `list(java.lang.String type, long timeout)` Returns a list of service infos of the specified type.
    `java.util.Map<java.lang.String,ServiceInfo[]>` | `listBySubtype(java.lang.String type)` Returns a list of service infos of the specified type sorted by subtype.
    `java.util.Map<java.lang.String,ServiceInfo[]>` | `listBySubtype(java.lang.String type, long timeout)` Returns a list of service infos of the specified type sorted by subtype.
    `NetworkTopologyListener[]` | `networkListeners()` Returns list of network change listeners
    `void` | `registerService(ServiceInfo info)` Register a service.
    `void` | `registerServiceType(java.lang.String type)` Register a service type.
    `void` | `removeNetworkTopologyListener(NetworkTopologyListener listener)` Remove listener for network changes.
    `void` | `removeServiceListener(java.lang.String type, ServiceListener listener)` Remove listener for services of a given type.
    `void` | `removeServiceTypeListener(ServiceTypeListener listener)` Remove listener for service types.
    `void` | `requestServiceInfo(java.lang.String type, java.lang.String name)` Request service information.
    `void` | `requestServiceInfo(java.lang.String type, java.lang.String name, boolean persistent)` Request service information.
    `void` | `requestServiceInfo(java.lang.String type, java.lang.String name, boolean persistent, long timeout)` Request service information.
    `void` | `requestServiceInfo(java.lang.String type, java.lang.String name, long timeout)` Request service information.
    `void` | `textValueUpdated(ServiceInfo target, byte[] value)`
    `void` | `unregisterAllServices()` Unregister all services.
    `void` | `unregisterService(ServiceInfo info)` Unregister a service.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### JmmDNSImpl

          public JmmDNSImpl()

  - ### Method Detail

    - #### close

          public void close()
                     throws java.io.IOException

      Specified by:
        `close` in interface `java.io.Closeable`
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Throws:
        `java.io.IOException`

    - #### getNames

          public java.lang.String[] getNames()

      Description copied from interface: `JmmDNS`
      Return the names of the JmDNS instances.
      Specified by:
        `getNames` in interface `JmmDNS`
      Returns:
        list of name of the JmDNS
      See Also:
        `JmDNS.getName()`

    - #### getHostNames

          public java.lang.String[] getHostNames()

      Description copied from interface: `JmmDNS`
      Return the list HostName associated with this JmmDNS instance.
      Specified by:
        `getHostNames` in interface `JmmDNS`
      Returns:
        list of host names
      See Also:
        `JmDNS.getHostName()`

    - #### getInterfaces

          public java.net.InetAddress[] getInterfaces()
                                               throws java.io.IOException

      Description copied from interface: `JmmDNS`
      Return the list of addresses of the interface to which this instance of JmmDNS is bound.
      Specified by:
        `getInterfaces` in interface `JmmDNS`
      Returns:
        list of Internet Address
      Throws:
        `java.io.IOException`
      See Also:
        `JmDNS.getInterface()`

    - #### getServiceInfos

          public ServiceInfo[] getServiceInfos(java.lang.String type,
                                      java.lang.String name)

      Description copied from interface: `JmmDNS`
      Get service information. If the information is not cached, the method will block until updated information is received on all DNS.

      Usage note: Do not call this method from the AWT event dispatcher thread. You will make the user interface unresponsive.
      Specified by:
        `getServiceInfos` in interface `JmmDNS`
      Parameters:
        `type` - fully qualified service type, such as `_http._tcp.local.` .
        `name` - unqualified service name, such as `foobar` .
      Returns:
        list of service info. If no service info is found the list is empty.
      See Also:
        `JmDNS.getServiceInfo(java.lang.String, java.lang.String)`

    - #### getServiceInfos

          public ServiceInfo[] getServiceInfos(java.lang.String type,
                                      java.lang.String name,
                                      long timeout)

      Description copied from interface: `JmmDNS`
      Get service information. If the information is not cached, the method will block until updated information is received on all DNS.

      Usage note: If you call this method from the AWT event dispatcher thread, use a small timeout, or you will make the user interface unresponsive.
      Specified by:
        `getServiceInfos` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.` .
        `name` - unqualified service name, such as `foobar` .
        `timeout` - timeout in milliseconds. Typical timeout should be 5s.
      Returns:
        list of service info. If no service info is found the list is empty.
      See Also:
        `JmDNS.getServiceInfo(java.lang.String, java.lang.String, long)`

    - #### getServiceInfos

          public ServiceInfo[] getServiceInfos(java.lang.String type,
                                      java.lang.String name,
                                      boolean persistent)

      Description copied from interface: `JmmDNS`
      Get service information. If the information is not cached, the method will block until updated information is received on all DNS.

      Usage note: If you call this method from the AWT event dispatcher thread, use a small timeout, or you will make the user interface unresponsive.
      Specified by:
        `getServiceInfos` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.` .
        `name` - unqualified service name, such as `foobar` .
        `persistent` - if `true` ServiceListener.resolveService will be called whenever new new information is received.
      Returns:
        list of service info. If no service info is found the list is empty.
      See Also:
        `JmDNS.getServiceInfo(java.lang.String, java.lang.String, boolean)`

    - #### getServiceInfos

          public ServiceInfo[] getServiceInfos(java.lang.String type,
                                      java.lang.String name,
                                      boolean persistent,
                                      long timeout)

      Description copied from interface: `JmmDNS`
      Get service information. If the information is not cached, the method will block until updated information is received on all DNS.

      Usage note: If you call this method from the AWT event dispatcher thread, use a small timeout, or you will make the user interface unresponsive.
      Specified by:
        `getServiceInfos` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.` .
        `name` - unqualified service name, such as `foobar` .
        `persistent` - if `true` ServiceListener.resolveService will be called whenever new new information is received.
        `timeout` - timeout in milliseconds. Typical timeout should be 5s.
      Returns:
        list of service info. If no service info is found the list is empty.
      See Also:
        `JmDNS.getServiceInfo(java.lang.String, java.lang.String, boolean, long)`

    - #### requestServiceInfo

          public void requestServiceInfo(java.lang.String type,
                                java.lang.String name)

      Description copied from interface: `JmmDNS`
      Request service information. The information about the service is requested and the ServiceListener.resolveService method is called as soon as it is available.
      Specified by:
        `requestServiceInfo` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.` .
        `name` - unqualified service name, such as `foobar` .
      See Also:
        `JmDNS.requestServiceInfo(java.lang.String, java.lang.String)`

    - #### requestServiceInfo

          public void requestServiceInfo(java.lang.String type,
                                java.lang.String name,
                                boolean persistent)

      Description copied from interface: `JmmDNS`
      Request service information. The information about the service is requested and the ServiceListener.resolveService method is called as soon as it is available.
      Specified by:
        `requestServiceInfo` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.` .
        `name` - unqualified service name, such as `foobar` .
        `persistent` - if `true` ServiceListener.resolveService will be called whenever new new information is received.
      See Also:
        `JmDNS.requestServiceInfo(java.lang.String, java.lang.String, boolean)`

    - #### requestServiceInfo

          public void requestServiceInfo(java.lang.String type,
                                java.lang.String name,
                                long timeout)

      Description copied from interface: `JmmDNS`
      Request service information. The information about the service is requested and the ServiceListener.resolveService method is called as soon as it is available.
      Specified by:
        `requestServiceInfo` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.` .
        `name` - unqualified service name, such as `foobar` .
        `timeout` - timeout in milliseconds
      See Also:
        `JmDNS.requestServiceInfo(java.lang.String, java.lang.String, long)`

    - #### requestServiceInfo

          public void requestServiceInfo(java.lang.String type,
                                java.lang.String name,
                                boolean persistent,
                                long timeout)

      Description copied from interface: `JmmDNS`
      Request service information. The information about the service is requested and the ServiceListener.resolveService method is called as soon as it is available.
      Specified by:
        `requestServiceInfo` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.` .
        `name` - unqualified service name, such as `foobar` .
        `persistent` - if `true` ServiceListener.resolveService will be called whenever new new information is received.
        `timeout` - timeout in milliseconds
      See Also:
        `JmDNS.requestServiceInfo(java.lang.String, java.lang.String, boolean, long)`

    - #### addServiceTypeListener

          public void addServiceTypeListener(ServiceTypeListener listener)
                                      throws java.io.IOException

      Description copied from interface: `JmmDNS`
      Listen for service types.
      Specified by:
        `addServiceTypeListener` in interface `JmmDNS`
      Parameters:
        `listener` - listener for service types
      Throws:
        `java.io.IOException`
      See Also:
        `JmDNS.addServiceTypeListener(javax.jmdns.ServiceTypeListener)`

    - #### removeServiceTypeListener

          public void removeServiceTypeListener(ServiceTypeListener listener)

      Description copied from interface: `JmmDNS`
      Remove listener for service types.
      Specified by:
        `removeServiceTypeListener` in interface `JmmDNS`
      Parameters:
        `listener` - listener for service types
      See Also:
        `JmDNS.removeServiceTypeListener(javax.jmdns.ServiceTypeListener)`

    - #### addServiceListener

          public void addServiceListener(java.lang.String type,
                                ServiceListener listener)

      Description copied from interface: `JmmDNS`
      Listen for services of a given type. The type has to be a fully qualified type name such as `_http._tcp.local.`.
      Specified by:
        `addServiceListener` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.`.
        `listener` - listener for service updates
      See Also:
        `JmDNS.addServiceListener(java.lang.String, javax.jmdns.ServiceListener)`

    - #### removeServiceListener

          public void removeServiceListener(java.lang.String type,
                                   ServiceListener listener)

      Description copied from interface: `JmmDNS`
      Remove listener for services of a given type.
      Specified by:
        `removeServiceListener` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.`.
        `listener` - listener for service updates
      See Also:
        `JmDNS.removeServiceListener(java.lang.String, javax.jmdns.ServiceListener)`

    - #### textValueUpdated

          public void textValueUpdated(ServiceInfo target,
                              byte[] value)

      Specified by:
        `textValueUpdated` in interface `ServiceInfoImpl.Delegate`

    - #### registerService

          public void registerService(ServiceInfo info)
                               throws java.io.IOException

      Description copied from interface: `JmmDNS`
      Register a service. The service is registered for access by other jmdns clients. The name of the service may be changed to make it unique.
      Note the Service info is cloned for each network interface.
      Specified by:
        `registerService` in interface `JmmDNS`
      Parameters:
        `info` - service info to register
      Throws:
        `java.io.IOException`
      See Also:
        `JmDNS.registerService(javax.jmdns.ServiceInfo)`

    - #### unregisterService

          public void unregisterService(ServiceInfo info)

      Description copied from interface: `JmmDNS`
      Unregister a service. The service should have been registered.
      Specified by:
        `unregisterService` in interface `JmmDNS`
      Parameters:
        `info` - service info to remove
      See Also:
        `JmDNS.unregisterService(javax.jmdns.ServiceInfo)`

    - #### unregisterAllServices

          public void unregisterAllServices()

      Description copied from interface: `JmmDNS`
      Unregister all services.
      Specified by:
        `unregisterAllServices` in interface `JmmDNS`
      See Also:
        `JmDNS.unregisterAllServices()`

    - #### registerServiceType

          public void registerServiceType(java.lang.String type)

      Description copied from interface: `JmmDNS`
      Register a service type. If this service type was not already known, all service listeners will be notified of the new service type. Service types are automatically registered as they are discovered.
      Specified by:
        `registerServiceType` in interface `JmmDNS`
      Parameters:
        `type` - full qualified service type, such as `_http._tcp.local.`.
      See Also:
        `JmDNS.registerServiceType(java.lang.String)`

    - #### list

          public ServiceInfo[] list(java.lang.String type)

      Description copied from interface: `JmmDNS`
      Returns a list of service infos of the specified type.
      Specified by:
        `list` in interface `JmmDNS`
      Parameters:
        `type` - Service type name, such as `_http._tcp.local.`.
      Returns:
        An array of service instance.
      See Also:
        `JmDNS.list(java.lang.String)`

    - #### list

          public ServiceInfo[] list(java.lang.String type,
                           long timeout)

      Description copied from interface: `JmmDNS`
      Returns a list of service infos of the specified type.
      Specified by:
        `list` in interface `JmmDNS`
      Parameters:
        `type` - Service type name, such as `_http._tcp.local.`.
        `timeout` - timeout in milliseconds. Typical timeout should be 6s.
      Returns:
        An array of service instance.
      See Also:
        `JmDNS.list(java.lang.String, long)`

    - #### listBySubtype

          public java.util.Map<java.lang.String,ServiceInfo[]> listBySubtype(java.lang.String type)

      Description copied from interface: `JmmDNS`
      Returns a list of service infos of the specified type sorted by subtype. Any service that do not register a subtype is listed in the empty subtype section.
      Specified by:
        `listBySubtype` in interface `JmmDNS`
      Parameters:
        `type` - Service type name, such as `_http._tcp.local.`.
      Returns:
        A dictionary of service info by subtypes.
      See Also:
        `JmDNS.listBySubtype(java.lang.String)`

    - #### listBySubtype

          public java.util.Map<java.lang.String,ServiceInfo[]> listBySubtype(java.lang.String type,
                                                                    long timeout)

      Description copied from interface: `JmmDNS`
      Returns a list of service infos of the specified type sorted by subtype. Any service that do not register a subtype is listed in the empty subtype section.
      Specified by:
        `listBySubtype` in interface `JmmDNS`
      Parameters:
        `type` - Service type name, such as `_http._tcp.local.`.
        `timeout` - timeout in milliseconds. Typical timeout should be 6s.
      Returns:
        A dictionary of service info by subtypes.
      See Also:
        `JmDNS.listBySubtype(java.lang.String, long)`

    - #### addNetworkTopologyListener

          public void addNetworkTopologyListener(NetworkTopologyListener listener)

      Description copied from interface: `JmmDNS`
      Listen to network changes.
      Specified by:
        `addNetworkTopologyListener` in interface `JmmDNS`
      Parameters:
        `listener` - listener for network changes

    - #### removeNetworkTopologyListener

          public void removeNetworkTopologyListener(NetworkTopologyListener listener)

      Description copied from interface: `JmmDNS`
      Remove listener for network changes.
      Specified by:
        `removeNetworkTopologyListener` in interface `JmmDNS`
      Parameters:
        `listener` - listener for network changes

    - #### networkListeners

          public NetworkTopologyListener[] networkListeners()

      Description copied from interface: `JmmDNS`
      Returns list of network change listeners
      Specified by:
        `networkListeners` in interface `JmmDNS`
      Returns:
        list of network change listeners

    - #### inetAddressAdded

          public void inetAddressAdded(NetworkTopologyEvent event)

      Description copied from interface: `NetworkTopologyListener`
      A network address has been added.
      Specified by:
        `inetAddressAdded` in interface `NetworkTopologyListener`
      Parameters:
        `event` - The NetworkTopologyEvent providing the name and fully qualified type of the service.

    - #### inetAddressRemoved

          public void inetAddressRemoved(NetworkTopologyEvent event)

      Description copied from interface: `NetworkTopologyListener`
      A network address has been removed.
      Specified by:
        `inetAddressRemoved` in interface `NetworkTopologyListener`
      Parameters:
        `event` - The NetworkTopologyEvent providing the name and fully qualified type of the service.