|
|
|
Definitions
|
|
|
|
===========
|
|
|
|
|
|
|
|
(a relatively recent (Oct 2014) new list of definitions from Erik)
|
|
|
|
|
|
|
|
# *Event* -- A JSON object that represents a piece of information to be
|
|
|
|
distributed to the the room. The object includes a payload and metadata,
|
|
|
|
including a ``type`` used to indicate what the payload is for and how to process
|
|
|
|
them. It also includes one or more references to previous events.
|
|
|
|
|
|
|
|
# *Event graph* -- Events and their references to previous events form a
|
|
|
|
directed acyclic graph. All events must be a descendant of the first event in a
|
|
|
|
room, except for a few special circumstances.
|
|
|
|
|
|
|
|
# *State event* -- A state event is an event that has a non-null string valued
|
|
|
|
`state_key` field. It may also include a ``prev_state`` key referencing exactly
|
|
|
|
one state event with the same type and state key, in the same event graph.
|
|
|
|
|
|
|
|
# *State tree* -- A state tree is a tree formed by a collection of state events
|
|
|
|
that have the same type and state key (all in the same event graph.
|
|
|
|
|
|
|
|
# *State resolution algorithm* -- An algorithm that takes a state tree as input
|
|
|
|
and selects a single leaf node.
|
|
|
|
|
|
|
|
# *Current state event* -- The leaf node of a given state tree that has been
|
|
|
|
selected by the state resolution algorithm.
|
|
|
|
|
|
|
|
# *Room state* / *state dictionary* / *current state* -- A mapping of the pair
|
|
|
|
(event type, state key) to the current state event for that pair.
|
|
|
|
|
|
|
|
# *Room* -- An event graph and its associated state dictionary. An event is in
|
|
|
|
the room if it is part of the event graph.
|
|
|
|
|
|
|
|
# *Topological ordering* -- The partial ordering that can be extracted from the
|
|
|
|
event graph due to it being a DAG.
|
|
|
|
|
|
|
|
(The state definitions are purposely slightly ill-defined, since if we allow
|
|
|
|
deleting events we might end up with multiple state trees for a given event
|
|
|
|
type and state key pair.)
|
|
|
|
|
|
|
|
Federation specific
|
|
|
|
-------------------
|
|
|
|
# *(Persistent data unit) PDU* -- An encoding of an event for distribution of
|
|
|
|
the server to server protocol.
|
|
|
|
|
|
|
|
# *(Ephemeral data unit) EDU* -- A piece of information that is sent between
|
|
|
|
servers and doesn't encode an event.
|
|
|
|
|
|
|
|
Client specific
|
|
|
|
---------------
|
|
|
|
# *Child events* -- Events that reference a single event in the same room
|
|
|
|
independently of the event graph.
|
|
|
|
|
|
|
|
# *Collapsed events* -- Events that have all child events that reference it
|
|
|
|
included in the JSON object.
|