It is quite common to play games over IM networks.
Since Tic-tac-toe is a well known game, XMPP needs a protocol to support it.
This protocol should provide all means to play a regular game of Tic-tac-toe over XMPP.
Tic-tac-toe is also one of the simplest games and played "just for fun".
Therefore no validation support is needed.
The typical duration is below one minute and the matches are not of great interest for non-players.
Therefore spectators do not have to be supported as well.
That is why this document only describes the protocol to play a Tic-tac-toe as a One-to-One match
without support for game saving and resuming.
An entity implementing this protocol MUST also support Instant GamingXEP-xxxx: Instant Gaming <http://pidgin-games.sourceforge.net/xep/instant-gaming.html>. and answer to disco requests accordingly
including both the Instant Gaming and the game <feature/> elements in the response.
...
...
]]>
When inviting to a game of Tic-tac-toe, an entity SHOULD use Data Forms (XEP-0004)XEP-0004: Data Forms <https://xmpp.org/extensions/xep-0004.html>. to specify game options in the REQUIRED <game/> element.
Possible options are "role" (of the inviting player), "rows" (height), "cols" (width) and "strike" (number of marks in a row needed to win).
If these options are missing, all but role default to '3' and role defaults to 'x'.
An implementation MUST be able to handle the default values.
Everything beyond that is OPTIONAL.
juliet@capulet.com-romeo@montague.net-tictactoe-1591-02-23T11:36:25Z-4321
Hello Juliet,
would you like to play a little game?
x333
]]>
When sending an invitation of type "renew",
the role option MUST be changed to the opposite of the role the inviting player had in the previous match with that match ID.
So both players essentially switch their roles.
All other options MUST stay the same.
During the game, players change in turn, each of them sending one move at a time.
The player with the role 'x' makes the first move.
A game move is represented as a <message/> stanza addressed to the full JID of the other player.
It MUST have a <thread/> child element which specifies the match ID.
Furthermore, the <message/> stanza contains a <turn/> element which in turn contains exactly one <move/> element
qualified by 'http://jabber.org/protocol/games/tictactoe'.
It MUST possess these attributes:
Notifying the players whether they have won or lost is in responsibility of the game client.
The game is considered terminated when the board is full, i.e. nine moves have been made.
For further termination conditions see the appropriate section of Instant GamingXEP-xxxx: Instant Gaming <http://pidgin-games.sourceforge.net/xep/instant-gaming.html>..
The author is not aware of any security issues introduced by this protocol extension.
This document requires no interaction with the Internet Assigned Numbers Authority (IANA)The Internet Assigned Numbers Authority (IANA) is the central coordinator for the assignment of unique parameter values for Internet protocols, such as port numbers and URI schemes. For further information, see <http://www.iana.org/>..
The XMPP RegistrarThe XMPP Registrar maintains a list of reserved protocol namespaces as well as registries of parameters used in the context of XMPP extension protocols approved by the XMPP Standards Foundation. For further information, see <https://xmpp.org/registrar/>. shall include 'http://jabber.org/protocol/games/tictactoe' in its registry of protocols.