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; +}; | 
