// 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 = "proto2"; package codemp.workspace_service; import "proto/model/user.proto"; message Empty {} message WorkspaceFileTree { // list of strings may be more efficient but it's a lot more hassle required string payload = 1; // spappolata di json } message WorkspaceUserList { repeated codemp.model.user.UserIdentity user = 1; } message WorkspaceMessage { required int32 id = 1; } message TreeRequest {} // empty message UserRequest {} message CursorResponse{} message UserListRequest{} service Workspace { // rpc Create (BufferPayload) returns (Empty); rpc Attach (AttachRequest) returns (Token); rpc ListBuffers (BufferListRequest) returns (BufferTree); rpc ListUsers (UserListRequest) returns (UserList); rpc ListBufferUsers (Empty) returns (Empty); rpc Join (JoinRequest) returns (Token); } message JoinRequest{ required string username=1; required string password=2; } message AttachRequest{ required string bufferAttach = 1; } message Token{ required string token = 1; } enum FileEventType { CREATE = 0; DELETE = 1; RENAME = 2; } message FileEvent { required string buffer = 1; required FileEventType type = 2; } enum UserEventType { JOIN = 0; LEAVE = 1; } message UserEvent { required codemp.model.user.UserIdentity user = 1; required UserEventType type = 2; } message BufferPayload { // buffer path to operate onto required string path = 1; // user id that is requesting the operation required codemp.model.user.UserIdentity user = 2; } message BufferListRequest{ } message BufferNode{ required string path = 1; } message BufferTree{ repeated BufferNode buffers = 1; } message UserList{ repeated codemp.model.user.UserIdentity users = 1; }