mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-24 03:57:06 -04:00
refactor: reimplement realtime-communication
This commit refactors a lot of things that are not easy to separate. It replaces the binary protocol of y-protocols with json. It introduces event based message processing. It implements our own code mirror plugins for synchronisation of content and remote cursors Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
parent
67cf1432b2
commit
3a06f84af1
110 changed files with 3920 additions and 2201 deletions
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 The HedgeDoc developers (see AUTHORS file)
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
import {
|
||||
ConnectionState,
|
||||
MessageTransporter
|
||||
} from '../message-transporters/message-transporter.js'
|
||||
import { Message, MessageType } from '../message-transporters/message.js'
|
||||
|
||||
/**
|
||||
* Message transporter for testing purposes that redirects message to another in memory connection message transporter instance.
|
||||
*/
|
||||
export class InMemoryConnectionMessageTransporter extends MessageTransporter {
|
||||
private otherSide: InMemoryConnectionMessageTransporter | undefined
|
||||
|
||||
constructor(private name: string) {
|
||||
super()
|
||||
}
|
||||
|
||||
public connect(other: InMemoryConnectionMessageTransporter): void {
|
||||
this.otherSide = other
|
||||
other.otherSide = this
|
||||
this.onConnected()
|
||||
other.onConnected()
|
||||
}
|
||||
|
||||
public disconnect(): void {
|
||||
this.onDisconnecting()
|
||||
|
||||
if (this.otherSide) {
|
||||
this.otherSide.onDisconnecting()
|
||||
this.otherSide.otherSide = undefined
|
||||
this.otherSide = undefined
|
||||
}
|
||||
}
|
||||
|
||||
sendMessage(content: Message<MessageType>): void {
|
||||
if (this.otherSide === undefined) {
|
||||
throw new Error('Disconnected')
|
||||
}
|
||||
console.debug(`${this.name}`, 'Sending', content)
|
||||
this.otherSide?.receiveMessage(content)
|
||||
}
|
||||
|
||||
getConnectionState(): ConnectionState {
|
||||
return this.otherSide !== undefined
|
||||
? ConnectionState.CONNECTED
|
||||
: ConnectionState.DISCONNECT
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue