----------------------------------------------------------------------
 P2P job management infrastructure
 Michael McLennan (mmclennan@purdue.edu)
======================================================================
 Copyright (c) 2008  Purdue Research Foundation
======================================================================

 The files in this directory form the basis for a peer-to-peer
 job management infrastructure.  The basic idea is that a client
 connects to a network of workers, asks for bids on a series of
 jobs it wants to execute, and then farms the jobs out to the
 workers and collects the results.  In addition to the client
 and the workers, there are "authority" servers that act like
 superpeers, helping clients/workers find each other and manage
 the transfer of points for completed jobs.

 TO RUN THE DEMO:

 $ wish test.tcl

 Press the "Start" button to launch an authority server and a
 series of workers.  Press the "Reload" button after that to
 load log information from the workers as they run.  Press
 "Stop" to kill all processes and load the final log information
 for visualization.

 Use the "<" and ">" buttons at the bottom to move forward/backward
 through time, visualizing the communication traffic and the P2P
 network formation.  Use the slider to jump quickly to a specific
 point in time.


 CLASSES:
   Handler ... Basis of all servers and clients.  Knows how to
               receive and interpret Tcl-based commands.  Has a
               notion of various "protocols" which are collections
               of messages that can be received and understood.
               Protocols can be versioned, so each handler should
               be able to support new and old clients if the protocol
               changes over time.

   Server .... Derived class based on Handler.  Sits at a particular
               port and listens for client connections.  The first
               message any client should send defines the protocol,
               and then the client sends Tcl-based commands after
               that.

   Client .... Derived class based on Handler.  Opens a socket to a
               particular host:port and begins sending/receiving
               messages.  The first message that it sends should
               define the protocol for outgoing messages, and the
               first message it receives should define the protocol
               for incoming messages.
