Как получить все состояние Ydoc в байте [] в С#, используя пакет YDotNet?C#

Место общения программистов C#
Ответить
Anonymous
 Как получить все состояние Ydoc в байте [] в С#, используя пакет YDotNet?

Сообщение Anonymous »

Приложение, над которым я работаю, по сути представляет собой редактор для совместной работы, в котором реагирующие клиенты (Slate+Yjs) будут подключаться к серверному API-интерфейсу DotNet Web с помощью signalR. Дело в том, что мне также нужно поддерживать текущее состояние документа YJS на сервере. Поскольку Ycs устарел, эквивалентным пакетом является YDotNet.
Я использую следующий код для установки изменений byte[] от клиентов: Ydoc — один из опор

Код: Выделить всё

 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;
}
}
И я пытаюсь получить полное состояние с помощью приведенного ниже кода, здесь у stateVector есть некоторые байтовые данные, поэтому он переходит в var state = транзакции.StateDiffV1(Array.Empty());, что приводит к ошибке

Код: Выделить всё

 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();
}
}
}
Но на самом деле выдается следующая ошибка. Даже я пытался инициализировать документ при создании объекта

Код: Выделить всё

Value cannot be null. (Parameter 'source')
Для справки, это моя настройка в реакции

Код: Выделить всё

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])
Мои требования здесь просты: клиенты будут отправлять данные на мой сервер, мне просто нужно сохранить их копию, поэтому я могу отправить их недавно присоединившемуся клиенту


Подробнее здесь: https://stackoverflow.com/questions/798 ... et-package
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»