add live
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details

pull/4/head
Bastien OLLIER 1 year ago
parent f718747294
commit b0cb3285fb

@ -18,7 +18,7 @@ const clients: Record<string, FastifyReply> = {};
const generateId = () => nanoid(32); const generateId = () => nanoid(32);
let updates: Update[] = []; let updates: Update[] = [];
let doc = Text.of([""]); let doc = Text.of(["foo"]);
const rooms: Record<string, WebSocket[]> = {}; const rooms: Record<string, WebSocket[]> = {};
function send(socket: WebSocket, requestId: number, payload: unknown) { function send(socket: WebSocket, requestId: number, payload: unknown) {
@ -52,41 +52,46 @@ fastify.register(async function (fastify: Fastify) {
}, },
(socket, request) => { (socket, request) => {
const { roomId } = request.params; const { roomId } = request.params;
const liveClients = rooms[roomId]; let liveClients = rooms[roomId];
console.log(roomId);
if(!liveClients){ if(!liveClients){
liveClients = [];
return; rooms[roomId] = liveClients;
} }
liveClients.push(socket); liveClients.push(socket);
console.log(rooms);
socket.on("message", message => { socket.on("message", message => {
const data = JSON.parse(message.toString()); const data = JSON.parse(message.toString());
const requestId = data._request; const requestId = data._request;
console.log(data.type)
if (data.type === "pullUpdates") { if (data.type === "pullUpdates") {
send(socket, requestId, updates.slice(data.version)); send(socket, requestId, updates.slice(data.version));
} else if (data.type === "pushUpdates") { } else if (data.type === "pushUpdates") {
let received = data.updates.map((json: any) => ({ let received = data.updates.map((json: any) => ({
clientID: json.clientID, clientID: json.clientID,
changes: ChangeSet.fromJSON(json.changes), changes: ChangeSet.fromJSON(json.changes),
})); }));
if (data.version != updates.length) { console.log(received);
received = rebaseUpdates(received, updates.slice(data.version)); if (data.version != updates.length) {
} received = rebaseUpdates(received, updates.slice(data.version));
for (let update of received) { }
updates.push(update); console.log(received)
doc = update.changes.apply(doc); for (let update of received) {
} console.log(update);
send( updates.push(update);
socket, console.log(update,doc);
requestId, doc = update.changes.apply(doc);
received.map((update: any) => ({ console.log(update);
clientID: update.clientID, }
changes: update.changes.toJSON(), send(
})), socket,
); requestId,
received.map((update: any) => ({
clientID: update.clientID,
changes: update.changes.toJSON(),
})),
);
} else if (data.type == "getDocument") { } else if (data.type == "getDocument") {
send(socket, requestId, { version: updates.length, doc: doc.toString() }); console.log("getDoc");
send(socket, requestId, { version: updates.length, doc: doc.toString() });
} }
}); });
}); });

Loading…
Cancel
Save