================================================
Agents for Job Execution and Communication Tasks
================================================

  ($Id$)

  >>> from cybertools.agent.tests import tester


Communication Handling
======================

Communication services are provided by handlers specified in the ``talk``
package.

Set up and start an agent with a server
---------------------------------------

  >>> config = '''
  ... controller(names=['core.sample'])
  ... scheduler(name='core')
  ... logger(name='default', standard=30)
  ... talk.server(names=['http'])
  ... talk.server.http(port=8081)
  ... talk.http(handler='testing')
  ... '''
  >>> from cybertools.agent.main import setup
  >>> master = setup(config)
  Starting agent application...
  Using controllers core.sample.
  Setting up HTTP handler for port 8081.

  >>> master.servers
  [<cybertools.agent.talk.http.HttpServer object...>]

We also provide a class to be used for creating subscribers, i.e. objects
that receive messages.

  >>> class Subscriber(object):
  ...     def __init__(self, name):
  ...         self.name = name
  ...     def onMessage(self, interaction, data):
  ...         print ('%s receiving: interaction=%s, data=%s' %
  ...                       (self.name, interaction, data))
  ...         tester.stop()

  >>> serverSub = Subscriber('server')
  >>> master.servers[0].subscribe(serverSub, 'testing')

Set up a client
---------------

In order to simplify the testing we do not set up a separate agent to
work with the client but handle the client directly.

  >>> from cybertools.agent.talk.http import HttpClient
  >>> client = HttpClient(master)

  >>> clientSub = Subscriber('client')

  >>> session = client.connect(clientSub, 'http://localhost:8081/')

Run the communication dialog
----------------------------

  >>> tester.run()
  client receiving: interaction=None, data={u'status': u'OK'}


Fin de Partie
=============

  >>> tester.stopThreads()
