Use Case #1: The Client connects to the Server
There is a default port that servers and clients can connect on. Users can
override that.

The server, when it is started listens on some port A.

The client connects to the server and sends a 'joinrequest' message:
   User/client name
   
The server responds with its current status:
   Accepting clients only as viewers
   Accepting clients to start a new game
   Not accepting clients because it is too full 
   Chooses not to accept that particular client by a means we have not
   determined ("client is ugly")
   MOTD or BOO HOO

Client thinks about the status it has been given and asks the user what to
do.

GOTO $STARTGAME ||
GOTO $VIEWGAME  ||
GOTO $QUIT      

UC#1.5: Someone starts the server and tells it what to be and do

Tell it: 
   What port to listen on
   How big the board should be
   Minimum number of clients
   Max number of clients
   White/black list of clients based on some criteria
   Win conditions? 
   Where clients are allowed to place things at the beginnin g fot the game

UC#2: The client joins a game that is starting (before anything has
happened)

The server gets:
     a list of species that the client can use

The client gets:
    Description of the board, including size and where the client can place
    A list of the other species from the other clients
    Directions on what to do next

GOTO $PLACINGPIECES

UC#3 Initial placement of species 
The server knows how many rounds of the list to make and how many pieces
can be placed in each round.

Server deterministically shuffles list of clients to produce some sort of
placing order.

Server goes through the list, asking each client in turn for a placement,
giving each client up to $N seconds to respond. If a response is received,
it sends that datum to the rest of the clients. Otherwise, that client is
skipped and we move on. 

Once all the turns have been taken, the server tells all of the clients to
switch into WorldListener mode and they do so and watch the drama unfold. 

UC#3.5: Client connects to server to get into WorldListener mode:
WorldListener mode is defined as:
   The server pushes changes for what the board looks like to the client

The client gets changes and applies them to its GUI board. It tells the
server that it did that.

UC#4: The server runs in RunTheFineGame mode:

The server processes the bnoar  in the ways we all know and love.
It sends changelists to each client. It does not wait, because it is cruel
and does not care.
Rinse and repeat. If the server runs out of shampoo, it crashes.

UC #5: Clients quit:
    It tells the server that it quit
    If it doesn't do that, the server notices that it times out 

UC #6
Client sends a message to the server which echoes it to all the other
clients.




