This is an unnoficial Zope 2.8 backport of official Zope's ClockServer.

Status of initial checkin compared to official version:
  __init__.py
    Locally created.
  ClockServer.py
    Locally created.
  component.xml
    Fix component prefix.
  datatypes.py
    Import ServerFactory (originaly locally defined).
    Fix ClockServer class import.
  OriginalClockServer.py
    Unchanged original ClockServer.py.
  README
    Locally created.

To enable it, add (and adapt) the following to your zope.conf:
  %import Products.ClockServer
  <clock-server>
    # starts a clock which calls /foo/bar every 30 seconds
    method /foo/bar
    period 30
    user admin
    password 123
  </clock-server>

ERP5 users: You are strongly encouraged to kee TimerService (but to stop using
timerserver) and use the following configuration:

  method /Control_Panel/timer_service/process_timer?interval:int=5
  shutdown_method /Control_Panel/timer_service/process_shutdown
  period 5

Note: Because ClockServer uses asyncore's "readable" method polling,
configured frequency is only a maximum value. Minimum freqency depends on
asyncore configuration (one wakeup every 30s on my machine). If there is
activity on Zope's sockets, frequency will increase.

This ClockServer is extended (see ClockServer.py) to propagate shutdown
notification to configured method, by pasing it extra parameters.
This allows method to put shutdown sequence on hold (but not interrupt it).
Also, note that it must not be abused: it's both bad to make user wait, and
there are some timeouts killing Zope if it takes too long to stop.

