From 4491482b0a5d6d4170906dc27c145f6f61ceac2d Mon Sep 17 00:00:00 2001 From: alemidev Date: Sat, 30 Jul 2022 14:35:38 +0200 Subject: [PATCH] feat: improved protocol definition use session for authentication, then workspace to keep in sync and subscribe to new buffers. Buffer service will dispatch live updates. --- build.rs | 1 + proto/session.proto | 17 +++++++++++++++++ proto/workspace.proto | 24 +++++++++++++++--------- 3 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 proto/session.proto diff --git a/build.rs b/build.rs index 7266e26..2b8ba6f 100644 --- a/build.rs +++ b/build.rs @@ -1,4 +1,5 @@ fn main() -> Result<(), Box> { + tonic_build::compile_protos("proto/session.proto")?; tonic_build::compile_protos("proto/workspace.proto")?; tonic_build::compile_protos("proto/buffer.proto")?; Ok(()) diff --git a/proto/session.proto b/proto/session.proto new file mode 100644 index 0000000..3a8f160 --- /dev/null +++ b/proto/session.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package session; + +service Session { + rpc Create (SessionRequest) returns (SessionResponse); + rpc Join (SessionRequest) returns (SessionResponse); + rpc Leave (SessionRequest) returns (SessionResponse); +} + +message SessionRequest { + optional string sessionKey = 1; +} + +message SessionResponse { + string sessionKey = 1; + bool accepted = 2; +} diff --git a/proto/workspace.proto b/proto/workspace.proto index 17e789d..a0c32b9 100644 --- a/proto/workspace.proto +++ b/proto/workspace.proto @@ -2,20 +2,26 @@ syntax = "proto3"; package workspace; service Workspace { - rpc Create (SessionRequest) returns (SessionResponse); - rpc Join (SessionRequest) returns (SessionResponse); - rpc Sync (SessionRequest) returns (SessionResponse); - rpc Leave (SessionRequest) returns (SessionResponse); + rpc Buffers (WorkspaceRequest) returns (BufferList); + rpc Push (BufferPayload) returns (WorkspaceResponse); + rpc Pull (BufferPayload) returns (BufferPayload); } -message SessionRequest { +message WorkspaceRequest { string sessionKey = 1; - optional string content = 2; } -message SessionResponse { +message WorkspaceResponse { string sessionKey = 1; bool accepted = 2; - optional string hash = 3; - optional string content = 4; +} + +message BufferList { + repeated string path = 1; +} + +message BufferPayload { + string sessionKey = 1; + string path = 2; + optional string content = 3; }