The Client Protocol
The player client must communicate with the server, and before we can start designing the client itself, we must determine how exactly the two communicate with each other. To do this, we need to arrive upon a protocol definition.
The Problem
In order to play the game, the user must be able to communicate her commands to her player object, and the player object, in turn, must be able to communicate both its responses and server event data to the user. This is ultimately just a client-server problem.
Requirements
<p>Here's a rough list of requirements (Feel free to add others):</p>
<ol type="1">
<li>The protocol should be able to encapsulate data for transport from point
to point via a network connection.</li>
<li>The protocol should be easy to understand and implement.</li>
<li>The protocol should provide a degree of abstraction such that it can
be implemented as a black box.</li>
<li>The protocol should be extensible by means of plugins or add-on libraries</li>
</ol>
Researched protocols
Here are a list of the existing protocols researched, along with notes as to what, if anything, can be used from it.
<div id="mudclientcompressionprotocol"> <p>Mud Client Compression Protocol<br> <http://abandoned.org/nemon/compress/></p>
<p>Notes: This seems to be just a protocol for establishing zlib-based compression by telnet option negotiation. Not exactly what we need, but we may wish to offer this option from the server if we decide to use a telnet or telnet-like connection.</p> </div>
<div id="mudclientprotocol"> <p>Mud Client Protocol<br> <http://www.moo.mud.org/mcp/></p> <p>Notes: Very interesting, very useful protocol. I hope to use some of the ideas it contains, but the over-the-wire protocol is a bit byzantine. Perhaps XML instead?</p> </div>
<div id="atlas"> <p>Atlas<br> <http://www.worldforge.org/website/protocols/></p> <p>Notes: This protocol is XML-based (or at least one syntax is), and shares the idea of capability negotiation with the Mud Client Protocol. </p> </div>
— GedTheGreysHain - 12 Sep 2000
