diff options
Diffstat (limited to 'xC-proto')
-rw-r--r-- | xC-proto | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/xC-proto b/xC-proto new file mode 100644 index 0000000..31534d4 --- /dev/null +++ b/xC-proto @@ -0,0 +1,120 @@ +// Backwards-compatible protocol version. +const VERSION = 1; + +// From the frontend to the relay. +struct CommandMessage { + u32 command_seq; + union CommandData switch (enum Command { + HELLO, + PING, + ACTIVE, + BUFFER_COMPLETE, + BUFFER_INPUT, + BUFFER_ACTIVATE, + BUFFER_LOG, + } command) { + case HELLO: + u32 version; + case PING: + void; + case ACTIVE: + void; + case BUFFER_COMPLETE: + string buffer_name; + string text; + u32 position; + case BUFFER_INPUT: + string buffer_name; + string text; + case BUFFER_ACTIVATE: + string buffer_name; + case BUFFER_LOG: + string buffer_name; + } data; +}; + +// From the relay to the frontend. +struct EventMessage { + u32 event_seq; + union EventData switch (enum Event { + PING, + BUFFER_UPDATE, + BUFFER_RENAME, + BUFFER_REMOVE, + BUFFER_ACTIVATE, + BUFFER_LINE, + BUFFER_CLEAR, + ERROR, + RESPONSE, + } event) { + case PING: + void; + case BUFFER_UPDATE: + string buffer_name; + case BUFFER_RENAME: + string buffer_name; + string new; + case BUFFER_REMOVE: + string buffer_name; + case BUFFER_ACTIVATE: + string buffer_name; + case BUFFER_LINE: + string buffer_name; + bool is_unimportant; + bool is_highlight; + enum Rendition { + BARE, + INDENT, + STATUS, + ERROR, + JOIN, + PART, + } rendition; + // Unix timestamp in seconds. + u64 when; + // Broken-up text, with in-band formatting. + union ItemData switch (enum Item { + TEXT, + RESET, + FG_COLOR, + BG_COLOR, + FLIP_BOLD, + FLIP_ITALIC, + FLIP_UNDERLINE, + FLIP_INVERSE, + FLIP_CROSSED_OUT, + FLIP_MONOSPACE, + } kind) { + case TEXT: + string text; + case RESET: + void; + case FG_COLOR: + i16 color; + case BG_COLOR: + i16 color; + case FLIP_BOLD: + case FLIP_ITALIC: + case FLIP_UNDERLINE: + case FLIP_INVERSE: + case FLIP_CROSSED_OUT: + case FLIP_MONOSPACE: + void; + } items<>; + case BUFFER_CLEAR: + string buffer_name; + case ERROR: + u32 command_seq; + string error; + case RESPONSE: + u32 command_seq; + union ResponseData switch (Command command) { + case BUFFER_COMPLETE: + u32 start; + string completions<>; + case BUFFER_LOG: + // UTF-8, but not guaranteed. + u8 log<>; + } data; + } data; +}; |