From 18290d768cb49f4176fcb14fd2c5cb8d87a044f7 Mon Sep 17 00:00:00 2001 From: frelodev Date: Sun, 3 Dec 2023 20:16:43 +0100 Subject: [PATCH] features: create buffers from workspaces, list buffers and users --- proto/workspace.proto | 158 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 proto/workspace.proto diff --git a/proto/workspace.proto b/proto/workspace.proto new file mode 100644 index 0000000..3f0dd42 --- /dev/null +++ b/proto/workspace.proto @@ -0,0 +1,158 @@ +// Workspace effimero: sta in /tmp o proprio in memoria +// Workspace e` autenticato: come si decide mentre si rifa il server +// Workspace ha id univoco (stringa), usato per connettercisi +// Workspace implementera` access control: +// * accedere al workspace +// * i singoli buffer +// - i metadati maybe???? +// Workspace offre le seguenti features: +// * listare i buffer DONE +// * listare gli user connessi DONE +// * creare buffers DONE REPLACE THE ONE ON buffer.proto +// * NO ATTACH: responsabilita` del buffer service +// * contiene metadata dei buffers: +// * path +// * data creazione +// Buffer id NON E` il path DONE +// BufferService NON ha metadata: +// Workspace tiene traccia di utenti attached (nel futuro) DONE + + + + + + +syntax = "proto3"; + +package workspace; +import "proto/user.proto"; +import "proto/buffer.proto"; + +message Empty {} + +message WorkspaceEvent { + oneof event { + CursorEvent cursor = 1; + FileEvent file = 2; + UserEvent user = 3; + } +} + +message WorkspaceFileTree { + // list of strings may be more efficient but it's a lot more hassle + string payload = 1; // spappolata di json +} + +message WorkspaceUserList { + repeated user.UserIdentity user = 1; +} + +message WorkspaceMessage { + int32 id = 1; +} + + +message TreeRequest {} // empty +message UserRequest {} +message CursorResponse{} +message UserListRequest{} + +service Workspace { + + // + rpc Create (BufferPayload) returns (BufferCreateResponse); + + rpc ListBuffers (BufferListRequest) returns (BufferList); + + rpc ListUsers (UserListRequest) returns (UserList); + + // + rpc Join (user.UserIdentity) returns (stream WorkspaceEvent); + + // + rpc Tree (TreeRequest) returns (WorkspaceFileTree); + + // + rpc Users (UserRequest) returns (WorkspaceUserList); // TODO could be handled by cursor service + + // send cursor movement to server + rpc Cursor (CursorEvent) returns (CursorResponse); +} + +// a tuple indicating row and column +message RowCol { + int32 row = 1; + int32 col = 2; +} + +// cursor position object +message CursorPosition { + // cursor start position + RowCol start = 1; + // cursor end position + RowCol end = 2; +} + +// cursor event, with user id and cursor position +message CursorEvent { + // user moving the cursor + string user = 1; + // path of current buffer this cursor is into + string buffer = 2; + // new cursor position + repeated CursorPosition position = 3; +} + +enum FileEventType { + CREATE = 0; + DELETE = 1; + RENAME = 2; +} + +message FileEvent { + string buffer = 1; + + FileEventType type = 2; +} + +enum UserEventType { + JOIN = 0; + LEAVE = 1; +} + +message UserEvent { + user.UserIdentity user = 1; + + UserEventType type = 2; +} + + + +message BufferPayload { + // buffer path to operate onto + string path = 1; + + // user id that is requesting the operation + user.UserIdentity user = 2; + + // optional buffer full content for replacing + optional string content = 3; +} + +message BufferCreateResponse { + + string status = 1; +} + + +message BufferListRequest{ + +} + +message BufferList{ + repeated buffer.BufferView buffers = 1; +} + +message UserList{ + repeated user.UserIdentity users = 1; +} \ No newline at end of file