-PROTOCOL
-
-
-all in context of a piece
-
-
- client server
-
- <-------------------
- some update
- piece
- gen
- your doing ?
-
-at start of op
- note picee.gen = gen
-
- grab, or move, or something:
- ------------------->
- grab/move/ungrab
- piece
- piece.gen
- if piece.gen == msg.piece.gen
- then set piece.last_client
-
- if piece.last_client == client
- then ok
-
- otherwise bad
- send nothing! a message
- must be in the queue already!
-
- <-------------------
- soem update
- piece
- gen
- your doing ?
-
-if "your doing"
-ignore the message, we are up to date,
-but set the piece's gen
-
-otherwise
-cancel any drag for the piece
-reset the piece state to that specified
-
-
---------------------------------------------------
-
-client maintains
- for each piece
- [ game state ]
- gen (last from server)
- x, y, held
- overall
- [ ui state ]
- what are we dragging, drag start, click state, etc.
-
-server maintains
- for each piece
- gen
- client list etc.
-
---------------------------------------------------
-
-
-ANALYSIS
-========
+CONCURRENT UPDATE PROTOCOL AND ANALYSIS
+=======================================
(Assumption: our network techniques deliver messages in order in both
directions between a server and a client; failure of the communication