Ember+ Protocol
Created on 2024-08-06T16:26:29-05:00
Ember+ works as a stack
- A subset of BER (ASN.1)
- An additional set of primitives (EmBER)
- The "Glow" document format which defines trees and RPC calls on top of EmBER
- "S101" framing, which separates individual encoded documents across the wire.
Primitives are written using the BER (Basic Encoding Rules) from the ASN.1 suite of standards. Like most BER users, only a very small subset of the rules are used.
Relative Object Identifiers: a set of integers. These are offsets to children within the tree, to point at a particular thing.
Requires a "back to front" encoding, or the ability to predict how large an encoded element will be. Containers include the size of themselves as part of the header tags.
Ember+ represents the world as a tree.
When changes occur in the tree you are encouraged to transmit only what has changed about the world state. Unless you have been otherwise asked (such as GetDirectory codes that request a full dump of everything.)
Schemas: nodes wear different "schemas," kind of like "capabilities," which is a list of identifiers for other schemas relevant to the node.
Streams: parameters of particularly high change speeds (like audio rates) are marked with stream identifiers, and are only transmitted if you ask.
The world is presented as a graph. "Nodes" are nodes of the graph that define something like a hardware device or ports of it. "Parameters" are nodes of the graph that define something which can be changed. Both "Nodes" and "Parameters" also have "properties" children, which are meta-information to describe which schemas apply from that node down, what a parameter does, and what the allowed values are.