[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

computer-go: Re: IGS client server protocol.



> I seek pointers to the specification for the IGS client server protocol

As others have already pointed out, there is unfortunately no
official specification of the protocol. The protocol is also changed
from time to time without warning to the client writers. There is
a mailing list of client writers clients@xxxxxxxxxxxxxxxxx managed
by the IGS administrator Tim Casey <tim@xxxxxxxxxxxxxxxxx>, but unfortunately
this list has been used only a few times in 1998 and never been used since.

As far as I know, the most complete description of the protocol is
in the files goserver.l and gointer.y of the IGS client xgospel, which
I maintain. But understanding those files requires minimum knowledge
of regular expressions, lex and yacc. The xgospel sources are available
on my go page http://gailly.net/go.html

xgospel parses with a strictly defined grammar all the data sent by IGS
and is often the first client to break whenever an undocumented change
is made in the protocol.

The most difficult problem with the protocol is that it is not really
a protocol. Because of net lag, there is often no way to relate an
answer sent by IGS to a command sent by the client. The client can
receive many unrelated messages before the answer arrives (including
answers to previous commands), and when the answer arrives it may not
contain enough information in itself to be interpreted without
ambiguity. The protocol was designed assuming that a client need
only interpret one line at a time, but this is generally impossible.
The client must reconstruct enough context to interpret the line.

In xgospel, I sometimes use the "Client verify" feature which allows
tagging an IGS answer with an identifier sent together with the
command. If I were to rewrite xgospel, I would use this feature
systematically and handling the protocol would be easier.

Jean-loup