syntax = "proto3";
package terrazzo.terminal;
import "shared.proto";
service TerminalService {
rpc ListTerminals(ListTerminalsRequest) returns (ListTerminalsResponse);
rpc NewId(NewIdRequest) returns (NewIdResponse);
rpc Register(RegisterTerminalRequest) returns (stream LeaseItem);
rpc Write(WriteRequest) returns (terrazzo.shared.Empty);
rpc Resize(ResizeRequest) returns (terrazzo.shared.Empty);
rpc Close(TerminalAddress) returns (terrazzo.shared.Empty);
rpc SetTitle(SetTitleRequest) returns (terrazzo.shared.Empty);
rpc SetOrder(SetOrderRequest) returns (terrazzo.shared.Empty);
rpc Ack(AckRequest) returns (terrazzo.shared.Empty);
}
message ListTerminalsRequest { repeated string visited = 1; }
message ListTerminalsResponse { repeated TerminalDef terminals = 1; }
message NewIdRequest { terrazzo.shared.ClientAddress address = 1; }
message NewIdResponse { int32 next = 1; }
message TerminalDef {
TerminalAddress address = 1;
string shell_title = 2;
MaybeString override_title = 3;
int32 order = 4;
int64 tile = 5;
}
message MaybeString { string s = 1; }
message RegisterTerminalRequest {
RegisterTerminalMode mode = 1;
TerminalDef def = 2;
enum RegisterTerminalMode {
REGISTER_TERMINAL_MODE_UNSPECIFIED = 0;
CREATE = 1;
REOPEN = 2;
}
}
message LeaseItem {
oneof kind {
bool eos = 1;
bytes data = 2;
}
}
message TerminalAddress {
string terminal_id = 1;
terrazzo.shared.ClientAddress via = 5;
}
message WriteRequest {
TerminalAddress terminal = 1;
string data = 2;
}
message ResizeRequest {
TerminalAddress terminal = 1;
Size size = 2;
bool force = 3;
}
message Size {
int32 rows = 1;
int32 cols = 2;
}
message SetTitleRequest {
TerminalAddress address = 1;
string shell_title = 2;
MaybeString override_title = 3;
}
message SetOrderRequest { repeated OrderedTerminal terminals = 1; }
message OrderedTerminal {
TerminalAddress address = 1;
int32 order = 2;
}
message AckRequest {
TerminalAddress terminal = 1;
uint64 ack = 3;
}