Wie erhalte ich den gesamten Ydoc-Status in Byte[] in C# mithilfe des YDotNet-Pakets?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie erhalte ich den gesamten Ydoc-Status in Byte[] in C# mithilfe des YDotNet-Pakets?

Post by Anonymous »

Die Anwendung, an der ich arbeite, ist im Grunde ein kollaborativer Editor, bei dem die React-Clients (Slate+Yjs) über signalR mit der Backend-Server-Dotnet-Web-API verbunden werden. Die Sache ist, dass ich den aktuellen Status des YJS-Dokuments auch auf dem Server beibehalten muss. Da Ycs veraltet ist, ist das entsprechende Paket YDotNet.
Ich verwende den folgenden Code, um die Byte[]-Änderungen von den Clients festzulegen – Ydoc ist es eine der Requisiten

Code: Select all

 public void ApplyUpdate(byte[] clientUpdate)
{
if (clientUpdate == null || clientUpdate.Length == 0)
return;

lock (_stateLock)
{
using (var transaction = YDoc.WriteTransaction())
{
transaction.ApplyV1(clientUpdate);
transaction.Commit();
}

LastActivity = DateTime.UtcNow;
}
}
Und ich versuche, den vollständigen Status durch den folgenden Code zu erhalten, hier hat stateVector einige Byte-Daten, daher wird es zu var state = Transaction.StateDiffV1(Array.Empty());, was zu einem Fehler führt

Code: Select all

 public byte[] GetFullState()
{
lock (_stateLock)
{
using (var transaction = YDoc.ReadTransaction())
{
var stateVector = transaction.StateVectorV1();

if (stateVector == null || stateVector.Length == 0)
{
// Document is empty, return empty array
return Array.Empty();
}
// Get the entire document state
var state = transaction.StateDiffV1(Array.Empty());
return state ?? Array.Empty();
}
}
}
Aber es wird tatsächlich der folgende Fehler ausgegeben: Ich habe sogar versucht, das Dokument zu initialisieren, als das Objekt erstellt wurde,

Code: Select all

Value cannot be null. (Parameter 'source')
Und als Referenz ist dies mein Setup in React

Code: Select all

const ydocA = useMemo(() => new Y.Doc(), [])
const sharedTypeA = useMemo(
() => ydocA.get('slate', Y.XmlText),
[ydocA]
)

const editorA = useMemo(() => {
const e = withReact(createEditor())
const yEditor = withYjs(e, sharedTypeA)
return withYHistory(yEditor)
}, [sharedTypeA])

useEffect(() => {
YjsEditor.connect(editorA)

return () => {
YjsEditor.disconnect(editorA)
}
}, [editorA])
Meine Anforderungen hier sind einfach: Kunden senden die Daten an meinen Server, ich muss nur die Kopie davon pflegen, damit ich sie an einen neu beigetretenen Kunden senden kann

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post