This test shows a preliminary mobile agent system.
A agent travels from the client to the server, performs
some tasks there, and travels back to the client with
the result. The actual agent object travels over the network!
But currently the agent code doesn't travel over the network,
see below.

The server sets up a shopping Mall with several shops.
The client creates a few shopping agents and sends them
to the Mall to start shopping with a shopping list.

The ShoppingAgents are passed to the Mall object on the
server, which lets the agents visit each shop in turn.
The agent buys a product from the shop if it can afford
the product. After visiting all shops, the agent returns
to the client which prints the results.

--> Currently, because of the way Pyro works, you have to
return the agent object explicitly to the client. Pyro
passes the agent object by value but all changes that
the agent undergoes on the server are local ON THE SERVER.
If you don't pass the object back (with return) to the
client, the copy of the agent on the client remains unchanged.
Hence the "Harry=mall.goShopping(Harry)" construct.
Perhaps a solution is to make the agent a Pyro object itself,
too, but when you do that it actually remains on the client,
and that is not wat I wanted here!

--> Currently the server must have access to the "agent.py" file
because the agent class is read from that file. There is no
way (yet) to have the server download the needed python code
on demand. I'm still thinking about a good way to do this.
Perhaps a hook into the __import__ statement and a Java RMI-like
 "class file server" does the trick? Note that we cannot pass
class code objects around because the unpickling on the server
side imports modules to load the needed code... :-( We have to
use python modules....


