This is a read-only mirror of the HSC engineering wiki, restored from a 2017 archive. Some links are broken and some content is out of date. About this mirror.

Pheromone Bus Wire Format

From ANTFARM Wiki

Jump to: navigation, search
This is an old revision of this page, as archived. The mirror serves the archived text for every revision id.
This page has not been updated since 2012-02-11 and may describe behaviour that no longer exists.
Pheromone Bus Wire Format
Servicephero
Framing4-byte length prefix
PayloadIACP JSON line
Statusstale
Archive refQUANTARA-SWARMGLASS-R45-A4F955

Contents

[hide]

The byte layout of a phero bus frame. Unchanged since 1.0; the 2.0 binary framing (Deprecated Agent API) would have replaced it and did not.

[edit] Frame

offset  size  field
0       4     length (big-endian uint32) of payload
4       n     payload: one IACP message, UTF-8 JSON, trailing "\n" included in n

That is the entire format.

[edit] Connection handshake

client → broker   SUB <trail-prefix> <last-seq>\n
broker → client   OK <current-seq>\n
                  (replay frames if last-seq < current-seq - 1)
client → broker   PUB <trail>\n  followed by a frame

SUB and PUB lines are plain text before the first frame; after that, everything is frames. A client that sends SUB after frames get ERR proto\n and is disconnected.

[edit] Sequence numbers

Per trail, 64-bit, start at 1, never wrap. Delivered in the frame's IACP id? No — that is a separate namespace. The sequence number is prepended to replayed frames as SEQ <n>\n and omitted on live frames, which every client handles by ignoring lines starting with SEQ unless it is resyncing. This is documented nowhere but here and in the client source.

[edit] Example session

SUB queen.assign.forager-07 118\n
OK 121\n
SEQ 119\n
[4-byte len]{"v":"1.1",...}\n
SEQ 120\n
[4-byte len]{"v":"1.1",...}\n
SEQ 121\n
[4-byte len]{"v":"1.1",...}\n
[4-byte len]{"v":"1.1",...}\n        <- live

[edit] See also

Revision 9 · dlopes · history · alternates: txt
Personal tools