This commit is contained in:
呈祥
2026-01-06 20:13:24 +08:00
parent 68ad8b3726
commit 7052675535
2 changed files with 21 additions and 4 deletions
+18 -3
View File
@@ -40,12 +40,27 @@ export class Client {
if (revision < 0 || this.revision > revision) {
throw new Error("operation revision not in history");
}
if (revision < this.revision) {
return;
}
const isSelfOp = operation.id === this.outstanding?.id;
if (this.outstanding) {
// 将outstanding操作转化为执行operation后的操作
const newOp = TextOperation.transform(this.outstanding, operation);
newOp.id = this.outstanding.id;
this.outstanding = newOp;
}
for (let i = 0; i < this.buffer.length; i++) {
// 将buffer中的操作转换为基于服务端文档状态的操作
const newOp = TextOperation.transform(this.buffer[i], this.buffer[i - 1] || operation);
// FIXME: 对buffer中的操作应该合并后再transform
const newOp = TextOperation.transform(
this.buffer[i],
// 如果有outstandingbuffer[0]应该基于outstanding
this.buffer[i - 1] || this.outstanding || operation
);
newOp.id = this.buffer[i].id;
this.buffer[i] = newOp;
}
@@ -66,7 +81,7 @@ export class Client {
if (isSelfOp) {
this.serverAck();
}
console.log('mattuy', 'client', this.name, this)
console.log("mattuy", "client", this.name, this);
}
// 服务端已确认收到发送的操作,从buffer中移除该操作,尝试发送下一个
@@ -88,7 +103,7 @@ export class Client {
// 向服务端发送本地待提交的操作,这里没有实现操作压缩,我们一个一个发送
this.outstanding = this.buffer.shift()!;
// 模拟向服务端发送操作,实际实现应该通过网络
server.receiveOperation(this.revision, this.outstanding);
server.receiveOperation(this, this.revision, this.outstanding);
// 应该有超时重发机制,这里没有实现
}