Subject: Inter-program Abalone Protocol

From: [email-masked] (Michael P. Frank)
Date: Mon, 20 Jul 92 13:58:35 EDT

For communication between Abalone programs, I suggest that the
underlying mechanism should be plain sockets, with a standard default
range of socket numbers for communicating with Abalone programs
running on a given machine.  I propose (totally arbitrarily) 12600 and
up.  (I.e., first look for an Abalone-playing program at 12600.  If
it's not there, try 12601, etc.  Stop when you get tired.)

Now, instead of picking an inflexible inter-program protocol for all
time, I think it would be nice to have an extensible framework within
which we can make up new protocols and improve them without breaking
older programs.

So I propose that all Abalone programs that communicate with others
using sockets at 12600 understand at least the following meta-protocol
(this is just an idea, feel free to propose alternatives):

			Abalone Meta-Protocol 0.0

	Two Abalone programs that have just connected using sockets
	should, first thing, agree on the protocol they will use, by
	taking turns sending text messages of the form:

		Abalone protocol %s\n

	Where '%s' is the name of the protocol being proposed by the
	program sending the text, and '\n' is, of course, newline.
	Protocol names should be ASCII text with no whitespace.  The
	program that initiates the socket connection should make the
	first proposal.  During this protocol-deciding phase, if
	either program receives text that is not in the above form, it
	should close the connection.

	Each program should make its protocol-proposals in order from
	the program's most-preferred protocol to its least-preferred
	protocol.  When a program runs out of protocols it
	understands, it should close the connection.

	When a program receives a protocol-proposal, it should check
	the list of protocols it understands.  If it understands the
	protocol, it must accept it and echo the protocol-proposal
	back to the sender, to indicate agreement.  Then it may begin
	following the agreed-upon protocol.

	Likewise, when a program receives back the protocol-proposal
	it just sent, it should take this to mean agreement, and
	should begin following that protocol.

	End of Meta-protocol.

Any comments?  I volunteer to implement this meta-protocol, or
whatever one we settle on, in the form of a library that I will make
available for anyone to incorporate into their Abalone programs.

This way, we can all easily invent new protocols and incorporate them
into our own programs without breaking our program's ability to
communicate with older programs.  Of course, we will have to have some
real Abalone protocols that are understood by all (or most) Abalone
programs for this to do any good.

So, everyone feel free to invent your own favorite Abalone-playing
protocol, give it a name for use in the meta-protocol, and post it to
this mailing list.  Hopefully we will settle on a minimal Abalone
protocol that all our programs will understand.

-Mike

---

From: [email-masked]
Date: Mon, 20 Jul 92 22:14:39 +0200

Looks interesting but, frankly, like a bit of an overkill to me. If
there exists a library, I'll use it, of course.

On the other hand there apparently exists a protocol which is used at
the computer game olymics. Maybe we should check that one out? It's
supposed to be versatile and we wouldn't have to reprogram anything in
case our progs ever go there :-)

ant

---

From: [email-masked] (Michael P. Frank)
Date: Mon, 20 Jul 92 20:41:58 EDT

>>>>> On Mon, 20 Jul 92 22:14:39 +0200, [email-masked] said:
ant> On the other hand there apparently exists a protocol which is
ant> used at the computer game olymics. Maybe we should check that one
ant> out? It's supposed to be versatile and we wouldn't have to
ant> reprogram anything in case our progs ever go there :-)

Yes, that's a good idea.  Let's wait till Jonathan hears from his
source before proceeding to develop the protocol.

-Mike