Provided by: tcllib_1.21+dfsg-1_all bug

NAME

       nameserv - Name service facility, Client

SYNOPSIS

       package require Tcl  8.4

       package require nameserv  ?0.4.2?

       package require comm

       package require logger

       ::nameserv::bind name data

       ::nameserv::release

       ::nameserv::search ?-async|-continuous? ?pattern?

       ::nameserv::protocol

       ::nameserv::server_protocol

       ::nameserv::server_features

       ::nameserv::cget -option

       ::nameserv::configure

       ::nameserv::configure -option

       ::nameserv::configure -option value...

       $result destroy

       $result filled

       $result get name

       $result names

       $result size

       $result getall ?pattern?

________________________________________________________________________________________________________________

DESCRIPTION

       Please read Name service facility, introduction first.

       This package provides a client for the name service facility implemented by the package nameserv::server.

       This  service  is  built  in  top  of and for the package comm.  It has nothing to do with the Internet's
       Domain Name System. If the reader is looking for a package dealing with that please see Tcllib's packages
       dns and resolv.

API

       The package exports eight commands, as specified below:

       ::nameserv::bind name data
              The caller of this command registers the given name as its name in the  configured  name  service,
              and  additionally  associates  a  piece  of  data  with  it.  The  service  does nothing with this
              information beyond storing it and delivering it as part of search results. The meaning is entirely
              up to the applications using the name service.

              A generally useful choice would for example be an identifier for a communication endpoint  managed
              by  the  package  comm.  Anybody  retrieving  the  name  becomes  immediately able to talk to this
              endpoint, i.e. the registering application.

              Of further importance is that a caller can register itself under more than one name, and each name
              can have its own piece of data.

              Note that the name service, and thwerefore this command, will throw an error if the chosen name is
              already registered.

       ::nameserv::release
              Invoking this command releases all names (and their data) registered  by  all  previous  calls  to
              ::nameserv::bind  of this client. Note that the name service will run this command implicitly when
              it loses the connection to this client.

       ::nameserv::search ?-async|-continuous? ?pattern?
              This command searches the name service for all  registered  names  matching  the  specified  glob-
              pattern.  If  not  specified  the  pattern  defaults  to *, matching everything. The result of the
              command is a dictionary mapping the matching names to the data associated with them at bind-time.

              If either option -async or -continuous were specified the  result  of  this  command  changes  and
              becomes  the  Tcl command of an object holding the actual result.  These two options are supported
              if  and  only  if  the  service  the  client  is  connected  to  supports  the  protocol   feature
              Search/Continuous.

              For -async the result object is asynchronously filled with the entries matching the pattern at the
              time  of the search and then not modified any more.  The option -continuous extends this behaviour
              by additionally continuously monitoring the service for the addition and removal of entries  which
              match the pattern, and updating the object's contents appropriately.

              Note  that  the  caller  is  responsible  for  configuring  the  object with a callback for proper
              notification when the current result (or further changes) arrive.

              For more information about this object see section ASYNCHRONOUS AND CONTINUOUS SEARCHES.

       ::nameserv::protocol
              This command returns the highest version of the name service protocol supported by the package.

       ::nameserv::server_protocol
              This command returns the highest version of the  name  service  protocol  supported  by  the  name
              service the client is currently connected to.

       ::nameserv::server_features
              This  command  returns  a  list  containing the names of the features of the name service protocol
              which are supported by the name service the client is currently connected to.

       ::nameserv::cget -option
              This command returns the currently configured  value  for  the  specified  -option.  The  list  of
              supported options and their meaning can be found in section OPTIONS.

       ::nameserv::configure
              In  this form the command returns a dictionary of all supported options, and their current values.
              The list of supported options and their meaning can be found in section OPTIONS.

       ::nameserv::configure -option
              In this form the command is an alias  for  "::nameserv::cget  -option".   The  list  of  supported
              options and their meaning can be found in section OPTIONS.

       ::nameserv::configure -option value...
              In  this  form the command is used to configure one or more of the supported options. At least one
              option has to be specified, and each option is followed by its new value.  The list  of  supported
              options and their meaning can be found in section OPTIONS.

              This  form  can  be  used only as long as the client has not contacted the name service yet. After
              contact has been made reconfiguration is not possible anymore. This means that this  form  of  the
              command  is for the initalization of the client before it use.  The command forcing a contact with
              the name service are

              bind

              release

              search

              server_protocol

              server_features

CONNECTION HANDLING

       The client automatically connects to the service when one of the commands below  is  run  for  the  first
       time, or whenever one of the commands is run after the connection was lost, when it was lost.

       bind

       release

       search

       server_protocol

       server_features

       Since  version  0.2  of the client it will generate an event when the connection is lost, allowing higher
       layers to perform additional actions. This is done via the support package uevent.  This  and  all  other
       name  service related packages hereby reserve the uevent-tag nameserv. All their events will be posted to
       that tag.

EVENTS

       This package generates only one event, lost-connection. The detail information provided to that event  is
       a  Tcl  dictionary.  The  only key contained in the dictionnary is reason, and its value will be a string
       describing why the connection was lost.  This string is supplied by the underlying communication package,
       i.e. comm.

OPTIONS

       The options supported by the client are for the specification of which name service to contact,  i.e.  of
       the location of the name service.  They are:

       -host name|ipaddress
              This  option  specifies  the  host  name  service  to contact is running on, either by name, or by
              ipaddress. The initial default is localhost, i.e. it is expected to contact a name service running
              on the same host as the application using this package.

       -port number
              This option specifies the port the name service to contact  is  listening  on.  It  has  to  be  a
              positive  integer number (> 0) not greater than 65536 (unsigned short). The initial default is the
              number  returned  by  the  command  ::nameserv::common::port,   as   provided   by   the   package
              ::nameserv::common.

ASYNCHRONOUS AND CONTINUOUS SEARCHES

       Asynchronous and continuous searches are invoked by using either option -async or -continuous as argument
       to the command ::nameserv::search.

       Note  that these two options are supported if and only if the service the client is connected to supports
       the protocol feature Search/Continuous. The service provided by the package ::nameserv::server does  this
       since version 0.3.

       For  such  searches  the  result of the search command is the Tcl command of an object holding the actual
       result. The API provided by these objects is:

       Options:

              -command command_prefix
                     This option has to be set if a user  of  the  result  object  wishes  to  get  asynchronous
                     notifications when the search result or changes to it arrive.

                     Note that while it is possible to poll for the arrival of the initial search result via the
                     method  filled, and for subsequent changes by comparing the output of method getall against
                     a saved copy, this is not the recommended behaviour.  Setting  the  -command  callback  and
                     processing the notifications as they arrive is much more efficient.

                     The  command_prefix  is  called with two arguments, the type of change, and the data of the
                     change. The  type  is  either  add  or  remove,  indicating  new  data,  or  deleted  data,
                     respectively.   The  data  of  the  change is always a dictionary listing the added/removed
                     names and their associated data.

                     The first change reported for a search is always the set of matching entries at the time of
                     the search.

       Methods:

              $result destroy
                     Destroys the object and cancels any continuous monitoring of the  service  the  object  may
                     have had active.

              $result filled
                     The  result  is  a  boolean  value indicating whether the search result has already arrived
                     (True), or not (False).

              $result get name
                     Returns the data associated with the given name at bind-time.

              $result names
                     Returns a list containing all names known to the object at the time of the invokation.

              $result size
                     Returns an integer value specifying the size of the result at the time of the invokation.

              $result getall ?pattern?
                     Returns a dictionary containing the search result at the time of  the  invokation,  mapping
                     the matching names to the data associated with them at bind-time.

HISTORY

       0.3.1  Fixed SF Bug 1954771.

       0.3    Extended the client with the ability to perform asynchronous and continuous searches.

       0.2    Extended  the  client with the ability to generate events when it loses its connection to the name
              service. Based on package uevent.

       0.1    Initial implementation of the client.

BUGS, IDEAS, FEEDBACK

       This document, and the package it describes, will undoubtedly contain bugs and  other  problems.   Please
       report  such  in  the  category  nameserv  of the Tcllib Trackers [http://core.tcl.tk/tcllib/reportlist].
       Please also report any ideas for enhancements you may have for either package and/or documentation.

       When proposing code changes, please provide unified diffs, i.e the output of diff -u.

       Note further that attachments are strongly preferred over inlined patches. Attachments  can  be  made  by
       going  to the Edit form of the ticket immediately after its creation, and then using the left-most button
       in the secondary navigation bar.

SEE ALSO

       nameserv::common(3tcl), nameserv::server(3tcl)

KEYWORDS

       client, name service

CATEGORY

       Networking

COPYRIGHT

       Copyright (c) 2007-2008 Andreas Kupries <andreas_kupries@users.sourceforge.net>

tcllib                                                0.4.2                                       nameserv(3tcl)