Přemysl Eric Janouch
8cd94b30f6
Currently it only goes for the longest common prefix. Refactor WebSocket handling into an abstraction for our protocol. The Go code generater finally needed fixing.
124 lines
2.1 KiB
Plaintext
124 lines
2.1 KiB
Plaintext
// 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,
|
|
ACTION,
|
|
} rendition;
|
|
// Unix timestamp in milliseconds.
|
|
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;
|
|
|
|
// Restriction: command_seq is strictly increasing, across both of these.
|
|
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;
|
|
};
|