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.
>  
>

Reply via email to