Robots can negotiate with other robots for common goals using the generalized negotiation protocol. A binary-capable, error-correcting or detecting, persistent, reliable duplex connection between two robot parties is assumed.
Negotiation is initiated by a negotiation client, which has the responsibility for sending the first lines of the protocol.
Here is an example of the protocol in a human friendly expanded notation - in practice, the protocol is binary and involves fixed-size messages.
NG 1
TOPIC "Movie Night" 1
BID "Saturn 3"
Above, a client robot declares it's intention to use negotiation protocol version 1, requests to negotiate on the topic "Movie Night" version 1 (used to decide on which movie to watch on a particular evening), and then produces an initial proposal for which movie to watch (the late-career Kirk Douglas techno-horror movie "Saturn 3".)
The actual wire protocol for these messages might look something like the following (using the uxntal / (v1) syntax)
( Client connections begin with the ASCII string "NG 1\n" )
#4e47 #200a
( remaining requests are fixed-size, binary messages )
( #5420 is "Topic",
#0101 is the topic code for "Movie Night"
#01 is the target version of the topic )
#5420 #0101 #01
( #4220 is "Bid", #5323 is the 16 bit identity code for the movie "Saturn 3" )
#4220 #5323
At any time, the server can decline the negotiation (either because it does not understand the messages or is not interested in the possible outcomes) by sending the message "#ffff" and closing the connection. Otherwise, the server can either accept the initial bid, or offer a counter-bid of it's own. In this case, let's imagine that the server party wants to watch something a little less violent, like the 1981 Andy Kaufman vehicle "Heartbeeps":
BID "Heartbeeps"
It's the client's turn to accept, counterbid, or end the negotiation. In this case the client can use previous bids as evidence that the server party likes color, shmaltz, and romance, and offers a classic:
BID "The Mechanical Marvel"
Now it's the server's turn again. When a party accepts the outcome of the negotiation, it provides a 16 bit token, intended to be useful to further coordination.
ACCEPT "The Mechanical Marvel" #F041
The token #F041 (we presume) can be used to retrieve and review the relevant tape from robots’ VHS collection.
Once the token is offered, the negotiation is complete and both parties can close the connection.
