remove y-protcol
This commit is contained in:
parent
50c48746df
commit
5fbc189884
7 changed files with 45 additions and 61 deletions
21
package-lock.json
generated
21
package-lock.json
generated
|
@ -37,7 +37,6 @@
|
||||||
"sqlite3": "^5.1.7",
|
"sqlite3": "^5.1.7",
|
||||||
"typeorm": "^0.3.20",
|
"typeorm": "^0.3.20",
|
||||||
"uuid": "^10.0.0",
|
"uuid": "^10.0.0",
|
||||||
"y-protocols": "^1.0.6",
|
|
||||||
"yjs": "^13.6.23"
|
"yjs": "^13.6.23"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -4832,26 +4831,6 @@
|
||||||
"node": ">=0.4"
|
"node": ">=0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/y-protocols": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz",
|
|
||||||
"integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"lib0": "^0.2.85"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16.0.0",
|
|
||||||
"npm": ">=8.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"type": "GitHub Sponsors ❤",
|
|
||||||
"url": "https://github.com/sponsors/dmonad"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"yjs": "^13.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/y18n": {
|
"node_modules/y18n": {
|
||||||
"version": "4.0.3",
|
"version": "4.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
|
||||||
|
|
|
@ -52,7 +52,6 @@
|
||||||
"sqlite3": "^5.1.7",
|
"sqlite3": "^5.1.7",
|
||||||
"typeorm": "^0.3.20",
|
"typeorm": "^0.3.20",
|
||||||
"uuid": "^10.0.0",
|
"uuid": "^10.0.0",
|
||||||
"y-protocols": "^1.0.6",
|
|
||||||
"yjs": "^13.6.23"
|
"yjs": "^13.6.23"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import * as Y from "yjs";
|
import * as Y from "yjs";
|
||||||
import * as AwarenessProtocol from "y-protocols/dist/awareness.cjs";
|
|
||||||
import { MissionMap } from "../storage/missionMap";
|
import { MissionMap } from "../storage/missionMap";
|
||||||
|
|
||||||
export default abstract class MissionDocHelper {
|
export default abstract class MissionDocHelper {
|
||||||
|
@ -20,15 +19,30 @@ export default abstract class MissionDocHelper {
|
||||||
// const ytext = ydoc.getText('meinText');
|
// const ytext = ydoc.getText('meinText');
|
||||||
// ytext.insert(0, 'Hier ist ein initialer Text');
|
// ytext.insert(0, 'Hier ist ein initialer Text');
|
||||||
|
|
||||||
const awareness = new AwarenessProtocol.Awareness(doc);
|
const awareness = 0; // TODO Awareness
|
||||||
awareness.setLocalState(null);
|
|
||||||
|
|
||||||
MissionMap.write(missionId, { missionId, doc, awareness, timestamp: 0 });
|
MissionMap.write(missionId, { missionId, doc, awareness, timestamp: 0 });
|
||||||
console.log(`created local doc ${missionId}`);
|
console.log(`created local doc ${missionId}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async saveDoc(missionId: string) {
|
public static docAsUpdate(missionId: string): Uint8Array {
|
||||||
// store Data to database
|
|
||||||
const mission = MissionMap.read(missionId);
|
const mission = MissionMap.read(missionId);
|
||||||
|
return Y.encodeStateAsUpdate(mission.doc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static docAsStateVector(missionId: string): Uint8Array {
|
||||||
|
const mission = MissionMap.read(missionId);
|
||||||
|
return Y.encodeStateVector(mission.doc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static docTimestamp(missionId: string): number {
|
||||||
|
const mission = MissionMap.read(missionId);
|
||||||
|
return mission.timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async saveDoc(missionId: string, update: Uint8Array) {
|
||||||
|
MissionMap.updateState(missionId, update);
|
||||||
|
const mission = MissionMap.read(missionId);
|
||||||
|
// store Data to database
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import * as Y from "yjs";
|
import * as Y from "yjs";
|
||||||
import * as AwarenessProtocol from "y-protocols/dist/awareness.cjs";
|
|
||||||
import ms from "ms";
|
import ms from "ms";
|
||||||
|
|
||||||
export interface missionStoreModel {
|
export interface missionStoreModel {
|
||||||
missionId: string;
|
missionId: string;
|
||||||
doc: Y.Doc;
|
doc: Y.Doc;
|
||||||
awareness: AwarenessProtocol.Awareness;
|
awareness: any;
|
||||||
timestamp: number;
|
timestamp: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,11 +32,13 @@ export abstract class MissionMap {
|
||||||
this.write(identifier, mission, true);
|
this.write(identifier, mission, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static updateAwareness(identifier: string, data: Uint8Array, socketId: string): void {
|
public static updateAwareness(identifier: string, data: any): void {
|
||||||
this.monitorAccess(identifier);
|
this.monitorAccess(identifier);
|
||||||
|
|
||||||
let mission = this.read(identifier);
|
let mission = this.read(identifier);
|
||||||
AwarenessProtocol.applyAwarenessUpdate(mission.awareness, data, socketId);
|
|
||||||
|
// TODO save awareness
|
||||||
|
|
||||||
this.write(identifier, mission, true);
|
this.write(identifier, mission, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
3
src/types/y-protocols.d.ts
vendored
3
src/types/y-protocols.d.ts
vendored
|
@ -1,3 +0,0 @@
|
||||||
declare module "y-protocols/dist/awareness.cjs" {
|
|
||||||
export * from "y-protocols/awareness";
|
|
||||||
}
|
|
|
@ -30,12 +30,14 @@ export default (io: Server, socket: Socket) => {
|
||||||
socket.on("disconnecting", () => {
|
socket.on("disconnecting", () => {
|
||||||
console.log("socket disconnection: ", socket.id);
|
console.log("socket disconnection: ", socket.id);
|
||||||
const socketRooms = Array.from(socket.rooms).filter((room) => room !== socket.id && room !== "home");
|
const socketRooms = Array.from(socket.rooms).filter((room) => room !== socket.id && room !== "home");
|
||||||
socket.leave(socketRooms[0]);
|
if (socketRooms[0]) {
|
||||||
|
socket.leave(socketRooms[0]);
|
||||||
const clients = io.sockets.adapter.rooms.get(socketRooms[0]);
|
const clients = io.sockets.adapter.rooms.get(socketRooms[0]);
|
||||||
if (!clients || clients.size == 0) {
|
if (!clients || clients.size == 0) {
|
||||||
MissionMap.delete(socketRooms[0]);
|
MissionMap.delete(socketRooms[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketMap.delete(socket.id);
|
SocketMap.delete(socket.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ import { Server, Socket } from "socket.io";
|
||||||
import { handleEvent } from "../handleEvent";
|
import { handleEvent } from "../handleEvent";
|
||||||
import { MissionMap, missionStoreModel } from "../../storage/missionMap";
|
import { MissionMap, missionStoreModel } from "../../storage/missionMap";
|
||||||
import * as Y from "yjs";
|
import * as Y from "yjs";
|
||||||
import * as AwarenessProtocol from "y-protocols/dist/awareness.cjs";
|
|
||||||
import MissionDocHelper from "../../helpers/missionDocHelper";
|
import MissionDocHelper from "../../helpers/missionDocHelper";
|
||||||
|
|
||||||
export default (io: Server, socket: Socket) => {
|
export default (io: Server, socket: Socket) => {
|
||||||
|
@ -24,35 +23,30 @@ export default (io: Server, socket: Socket) => {
|
||||||
await MissionDocHelper.populateDoc(missionId);
|
await MissionDocHelper.populateDoc(missionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
const mission = MissionMap.read(missionId);
|
|
||||||
|
|
||||||
if (clientLastUpdate && clientLastUpdate.timestamp) {
|
if (clientLastUpdate && clientLastUpdate.timestamp) {
|
||||||
if (mission.timestamp > clientLastUpdate.timestamp) {
|
if (MissionDocHelper.docTimestamp(missionId) > clientLastUpdate.timestamp) {
|
||||||
socket.emit("package-sync", {
|
socket.emit("package-sync", {
|
||||||
update: Y.encodeStateAsUpdate(mission.doc),
|
update: MissionDocHelper.docAsUpdate(missionId),
|
||||||
timestamp: mission.timestamp,
|
timestamp: MissionDocHelper.docTimestamp(missionId),
|
||||||
source: "server",
|
source: "server",
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
socket.emit("sync-get-missing-updates", {
|
socket.emit("sync-get-missing-updates", {
|
||||||
stateVector: Y.encodeStateVector(mission.doc),
|
stateVector: MissionDocHelper.docAsStateVector(missionId),
|
||||||
timestamp: mission.timestamp,
|
timestamp: MissionDocHelper.docTimestamp(missionId),
|
||||||
source: "server",
|
source: "server",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
socket.emit("package-sync", {
|
socket.emit("package-sync", {
|
||||||
update: Y.encodeStateAsUpdate(mission.doc),
|
update: MissionDocHelper.docAsUpdate(missionId),
|
||||||
timestamp: mission.timestamp,
|
timestamp: MissionDocHelper.docTimestamp(missionId),
|
||||||
source: "server",
|
source: "server",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.emit("package-sync-awareness", {
|
socket.emit("package-sync-awareness", {
|
||||||
update: AwarenessProtocol.encodeAwarenessUpdate(
|
update: [], // do awareness self
|
||||||
mission.awareness,
|
|
||||||
Array.from(mission.awareness.getStates().keys())
|
|
||||||
),
|
|
||||||
source: "server",
|
source: "server",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -75,7 +69,7 @@ export default (io: Server, socket: Socket) => {
|
||||||
async (data: { update: Array<number>; timestamp: number }) => {
|
async (data: { update: Array<number>; timestamp: number }) => {
|
||||||
const socketRooms = Array.from(socket.rooms).filter((room) => room !== socket.id && room !== "home");
|
const socketRooms = Array.from(socket.rooms).filter((room) => room !== socket.id && room !== "home");
|
||||||
try {
|
try {
|
||||||
MissionMap.updateState(socketRooms[0], new Uint8Array(data.update));
|
MissionDocHelper.saveDoc(socketRooms[0], new Uint8Array(data.update));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "package-sync",
|
type: "package-sync",
|
||||||
|
@ -87,10 +81,9 @@ export default (io: Server, socket: Socket) => {
|
||||||
room: socketRooms[0],
|
room: socketRooms[0],
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const mission = MissionMap.read(socketRooms[0]);
|
|
||||||
socket.emit("package-sync", {
|
socket.emit("package-sync", {
|
||||||
update: Y.encodeStateAsUpdate(mission.doc),
|
update: MissionDocHelper.docAsUpdate(socketRooms[0]),
|
||||||
timestamp: mission.timestamp,
|
timestamp: MissionDocHelper.docTimestamp(socketRooms[0]),
|
||||||
source: "server",
|
source: "server",
|
||||||
error: true,
|
error: true,
|
||||||
});
|
});
|
||||||
|
@ -115,7 +108,7 @@ export default (io: Server, socket: Socket) => {
|
||||||
type: "package-sync",
|
type: "package-sync",
|
||||||
answer: {
|
answer: {
|
||||||
update: missingUpdates,
|
update: missingUpdates,
|
||||||
timestamp: mission.timestamp,
|
timestamp: MissionDocHelper.docTimestamp(socketRooms[0]),
|
||||||
source: "server",
|
source: "server",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -134,7 +127,7 @@ export default (io: Server, socket: Socket) => {
|
||||||
async (data: { update: Array<number>; timestamp: number }) => {
|
async (data: { update: Array<number>; timestamp: number }) => {
|
||||||
const socketRooms = Array.from(socket.rooms).filter((room) => room !== socket.id && room !== "home");
|
const socketRooms = Array.from(socket.rooms).filter((room) => room !== socket.id && room !== "home");
|
||||||
try {
|
try {
|
||||||
MissionMap.updateAwareness(socketRooms[0], new Uint8Array(data.update), socket.id);
|
MissionMap.updateAwareness(socketRooms[0], new Uint8Array(data.update));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "package-sync-awareness",
|
type: "package-sync-awareness",
|
||||||
|
@ -145,9 +138,8 @@ export default (io: Server, socket: Socket) => {
|
||||||
room: socketRooms[0],
|
room: socketRooms[0],
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const mission = MissionMap.read(socketRooms[0]);
|
|
||||||
socket.emit("package-sync-awareness", {
|
socket.emit("package-sync-awareness", {
|
||||||
update: Y.encodeStateAsUpdate(mission.doc),
|
update: MissionDocHelper.docAsUpdate(socketRooms[0]),
|
||||||
source: "server",
|
source: "server",
|
||||||
error: true,
|
error: true,
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue