View Source Seance.Channel behaviour (seance v0.1.0)

To build a Seance application, you'll first want to add a channel that uses this module.

  use Seance.Channel, web_module: MyAppWeb, max_version: 100
  • message_builder optional, defaults to {Seance.MessageBuilder, ignore_keys: [:__meta__]}. If set, should be a tuple whose first element is a module that defines update_state_message/4 and new_state_message/3 and and second element contains any options. Options are passed as final arg to both functions when invoked. See Seance.MessageBuilder for details
  • max_version optional, defaults to 1000. This is the maximum version number, after which it will reset to 0 and begin incrementing again. Version numbers are used to detect a patch message arriving out of order. If such a condition is detected by phx-live-state a new copy of state is requested.

Summary

Callbacks

Called from join to authorize the connection. Return {:ok, socket} to authorize or {:error, reason} to deny. Default implementation returns {:ok, socket}

Receives an event an payload from the client and current state. Return a :reply tuple if you need to send events to the client, otherwise return :noreply. :reply tuples can contain a single Seance.Event or a list of events as well as the new state.

Receive an event name, payload, the current state, and the socket. Use this callback if you need to receive the socket as well as the state. Return a :reply tuple if you need to send events to the client, otherwise return :noreply. :reply tuples can contain a single Seance.Event or a list of events, as well as the new state and the socket. :noreply tuples must contain the new state and and socket.

Receives pubsub message and current state. Returns new state

Returns the initial application state. Called just after connection

The key on assigns to hold application state. Defaults to :state.

The key on assigns to hold application state version. Defaults to :version.

Callbacks

Link to this callback

authorize(channel, payload, socket)

View Source
@callback authorize(channel :: binary(), payload :: term(), socket :: Socket.t()) ::
  {:ok, socket :: Socket.t()} | {:error, binary()}

Called from join to authorize the connection. Return {:ok, socket} to authorize or {:error, reason} to deny. Default implementation returns {:ok, socket}

Link to this callback

handle_event(event_name, payload, state)

View Source (optional)
@callback handle_event(event_name :: binary(), payload :: term(), state :: term()) ::
  {:reply,
   reply ::
     %Seance.Event{detail: term(), name: term()}
     | [%Seance.Event{detail: term(), name: term()}], new_state :: any()}
  | {:noreply, new_state :: map()}

Receives an event an payload from the client and current state. Return a :reply tuple if you need to send events to the client, otherwise return :noreply. :reply tuples can contain a single Seance.Event or a list of events as well as the new state.

Link to this callback

handle_event(event_name, payload, state, socket)

View Source (optional)
@callback handle_event(
  event_name :: binary(),
  payload :: term(),
  state :: term(),
  socket :: Socket.t()
) ::
  {:reply,
   reply ::
     %Seance.Event{detail: term(), name: term()}
     | [%Seance.Event{detail: term(), name: term()}], new_state :: map(),
   Socket.t()}
  | {:noreply, new_state :: map(), Socket.t()}

Receive an event name, payload, the current state, and the socket. Use this callback if you need to receive the socket as well as the state. Return a :reply tuple if you need to send events to the client, otherwise return :noreply. :reply tuples can contain a single Seance.Event or a list of events, as well as the new state and the socket. :noreply tuples must contain the new state and and socket.

Link to this callback

handle_message(message, state)

View Source
@callback handle_message(message :: term(), state :: term()) ::
  {:reply,
   reply ::
     %Seance.Event{detail: term(), name: term()}
     | [%Seance.Event{detail: term(), name: term()}], new_state :: any()}
  | {:noreply, new_state :: term()}

Receives pubsub message and current state. Returns new state

Link to this callback

init(channel, payload, socket)

View Source
@callback init(channel :: binary(), payload :: term(), socket :: Socket.t()) ::
  {:ok, state :: map()}
  | {:ok, state :: map(), Socket.t()}
  | {:error, reason :: any()}

Returns the initial application state. Called just after connection

@callback state_key() :: atom()

The key on assigns to hold application state. Defaults to :state.

@callback state_version_key() :: atom()

The key on assigns to hold application state version. Defaults to :version.