--- /dev/null
+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.