协同编辑OT算法client端UNDO和REDO的实现

客户端维护两个操作栈,undo操作栈和redo操作栈,数据结构如下:

UndoManager {
    maxItems //undo,redo栈最大深度
    undoStack //undo操作栈
    redoStack //redo操作栈
}

undo,redo处理会出现如下四种情况:

客户端有新的op操作:将 inverse(op) 压入undoStack 接收到服务端新的op操作:将服务端op操作应用到客户端文档,遍历undoStack所有操作进行OT转换,遍历redoStack所有操作进行OT转换 执行undo操作:将undoStack.pop应用到客户端文档,并发送给服务端,将inverse(undoStack.pop)压入redoStack 执行redo操作:将redoStack.pop应用到客户端文档,并发送给服务端,将inverse(redoStack.pop)压入undoStack

和单机文档编辑中的undo和redo相比,这里最大的区别是当服务端有新的操作发送到客户端时,客户端需要遍历undoStack和redoStack做相应的OT转换

Loading Disqus comments...
Table of Contents