Yex.Sync.SharedDoc (y_ex v0.8.0)

View Source

This process handles messages for yjs protocol sync and awareness. https://github.com/yjs/y-protocols

Persistence is supported by passing persistence module. see Yex.Sync.SharedDoc.PersistenceBehaviour

If the observer process does not exist, it will automatically terminate.

Summary

Types

Launch Parameters

Functions

Get the current state of the document.

Receive doc update notifications in the calling process.

Send a message to the SharedDoc process. message mus be represented in the Yjs protocol default format. type supports sync and awareness.

Callback implementation for Yex.DocServer.start/2.

Start the initial state exchange.

Stop receiving doc update notifications in the calling process.

Update the document with the given function.

Types

launch_param()

@type launch_param() ::
  {:doc_name, String.t()}
  | {:persistence, {module() | {module(), init_arg :: term()}}}
  | {:auto_exit, boolean()}
  | {:doc_option, Yex.Doc.Options.t()}

Launch Parameters

  • :doc_name - The name of the document.
  • :persistence - Persistence module that implements PersistenceBehaviour.
  • :auto_exit - Automatically terminate the SharedDoc process when there is no longer a process to receive update notifications.
  • :doc_option - Options for the document.

Functions

child_spec(arg)

get_doc(server)

Get the current state of the document.

Returns the Doc struct that represents the current state of the shared document. Note: If you manipulate the structure obtained with this function from a different Node (Erlang VM node), some features may not work (e.g., observe). Please be careful.

observe(server)

Receive doc update notifications in the calling process.

process_message_v1(server, message, origin \\ nil)

Callback implementation for Yex.DocServer.process_message_v1/3.

send_yjs_message(server, message)

Send a message to the SharedDoc process. message mus be represented in the Yjs protocol default format. type supports sync and awareness.

start(arg, opt \\ [])

Callback implementation for Yex.DocServer.start/2.

start_link(arg, opt \\ [])

Callback implementation for Yex.DocServer.start_link/2.

start_sync(server, step1_message)

Start the initial state exchange.

unobserve(server)

Stop receiving doc update notifications in the calling process.

If auto_exit is started with true(default), the SharedDoc process will automatically stop when there is no longer a process to receive update notifications.

update_doc(server, fun, timeout \\ 5000)

Update the document with the given function.

The function should take a Doc struct as its argument and modify it as needed. The timeout parameter specifies how long to wait for the update to complete (defaults to 5000ms).

Returns :ok on success or {:error, reason} on failure.

Examples

iex> {:ok, shared_doc} = SharedDoc.start_link(doc_name: "document_name")
iex> SharedDoc.update_doc(shared_doc, fn doc -> Yex.Doc.get_array(doc, "array") |> Array.insert(0, "updated_data") end) # update the document
:ok
iex> SharedDoc.get_doc(shared_doc) |> Yex.Doc.get_array("array") |> Yex.Array.to_json() # check the update
["updated_data"]