Guns Protocol

The Guns protocol is based on the EDIFACT protocol, made slightly more human-readable by replacing the few key characters (space as element separator, comma as list separator, line feed as "segment" separator, backslash as escape character).

The reason for using it is it's a nice, low-bandwidth protocol with sufficient freedom to be useful while remaining sufficiently simple to be quickly comprehensible to a reader (a.k.a. tired programmer debugging).

Extension Note: An extension to the simple protocol is "long data", used only by the lobby protocol: some commands may require a lot of data, which can't be easily transmitted as an argument (element/list) to a normal command (segment). In this case, the server will notify the client that it's entering "long data" mode, and that it will process everything up to the next long data separator ("\n.\n", aka ". on a line by itself") as a single unit. At the end of a long data unit, the server automatically resumes normal operation.

Summary/Overview
Messages are strings terminated by \n, containing one or more space-separated elements, some of which can be comma-separated lists.

The first element of a message is always its three-letter (case-insensitive) type identifier, which determines what other elements may be present in the message.

''Implementation detail: messages can and should be bunched together for sending in a single datagram, when possible. When reading a datagram, expect multiple \n-separated messages.''

Reading message formats: TLA &lt;required parameter&gt; [optional parameter]

Common messages
These are used in both lobby and battle protocols, as core utility messages:

Error
ERR &lt;error-id&gt; [error message]

Sent by a server or client to inform the other party there's a problem. Mostly only useful in S2C, but could be encountered in the opposite as well.

Warning
WAR &lt;warning-id&gt; [warning message]

Sent by client or server to inform the other party of changes in normal handling that are not problems. Most notably, warns of entering "long data" mode.

Uses

 * Guns Lobby Protocol
 * Guns Battle Protocol
 * Guns Auth indev