Hi Sushant,
thanks for the status report. As recently you also got a LyX gsoc repo
(gsoc/sushant), did you also commit and push the patch(es) below to that repo?
T.
On 23/06/14 17:43, Sushant Raikar wrote:
> Link to Patch:
>
> https://gist.github.com/HotSushi/1b8b5086405be091ee86
>
> Introducing Version : This patch introduces version-ing in document.
>
> Date: 23-June-2014
>
> Previous Patch: vehicle.patch (Updated to provide features below)
>
> Author: Sushant Raikar
>
> Note: Ignore all printf's, they are added temporarily for debugging purpose,
> and will be removed once the patch is finalized.
>
> Working:
> If there is a laggy connection, the documents at the 2 ends may not always be
> in the same state. So a LFUN, by the time it reaches the other end, may have
> to be dispatched on a different state of document, hence leading to
> ambiguity. In order to handle this, a document is given a version. And each
> LFUN is targeted at a specific version of document.
>
> A history table is maintained which tracks cursor change after any LFUN
> dispatch. When a remote LFUN is received, it is adjusted based on the history
> (to predict where the cursor should be in the latest revision). Naturally,if
> one cursor position is behind another 'editing' cursor position, it is
> unchanged. If it is in front, then it has to be adjusted.
>
> Another important point to note is that, the LFUNs for cursor
> movements(move-right, move-left) are not sent to remote, only the important
> editing LFUNs (ex character insert, delete, table insert etc) are sent along
> with the cursor position where they are dispatched. This approach provides
> several advantages:
> - unnecessary version change
> - less network traffic
> - immune to different window sizes (LFUNs for mouse_click,home, end, pageup
> etc. will work)
>
> Features:
> * local cursor moves based on remote dispatch (unlike in previous patch where
> local cursor was staying stationary)
> * History queue added, each LFUN sent over dispatches on the targeted version
> of the document (consistency)
> * adjusting of cursor based on history queue (neglect changes due to self)
> * 2 DocIterator's can be subtracted and added back.
> * each client is identified by a client_id
>
> Shortcomings:
> * no version synchronization. When client connects their buffer is in
> 'version 0'. All incoming LFUNs are adjusted from version 0.
> How to handle, at certain time the two ends should synchronize, and the
> cursor will have to be adjusted from version i, instead of 0. (less looping)
>
> * doesn't handle when editing takes place at same cursor location at both
> ends.
> How to handle, each client is prioritized, higher priority client stays in
> its location, lower priority client moves.
>
>