server.rs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. use std::sync::Arc;
  2. use parking_lot::RwLock;
  3. use tokio::sync::mpsc;
  4. use flowy_database_deps::cloud::DatabaseCloudService;
  5. use flowy_document_deps::cloud::DocumentCloudService;
  6. use flowy_error::FlowyError;
  7. use flowy_folder_deps::cloud::FolderCloudService;
  8. use flowy_storage::FileStorageService;
  9. // use flowy_user::services::database::{
  10. // get_user_profile, get_user_workspace, open_collab_db, open_user_db,
  11. // };
  12. use flowy_user_deps::cloud::UserCloudService;
  13. use flowy_user_deps::entities::*;
  14. use crate::local_server::impls::{
  15. LocalServerDatabaseCloudServiceImpl, LocalServerDocumentCloudServiceImpl,
  16. LocalServerFolderCloudServiceImpl, LocalServerUserAuthServiceImpl,
  17. };
  18. use crate::AppFlowyServer;
  19. pub trait LocalServerDB: Send + Sync + 'static {
  20. fn get_user_profile(&self, uid: i64) -> Result<Option<UserProfile>, FlowyError>;
  21. fn get_user_workspace(&self, uid: i64) -> Result<Option<UserWorkspace>, FlowyError>;
  22. fn get_collab_updates(&self, uid: i64, object_id: &str) -> Result<Vec<Vec<u8>>, FlowyError>;
  23. }
  24. pub struct LocalServer {
  25. local_db: Arc<dyn LocalServerDB>,
  26. stop_tx: RwLock<Option<mpsc::Sender<()>>>,
  27. }
  28. impl LocalServer {
  29. pub fn new(local_db: Arc<dyn LocalServerDB>) -> Self {
  30. Self {
  31. local_db,
  32. stop_tx: Default::default(),
  33. }
  34. }
  35. pub async fn stop(&self) {
  36. let sender = self.stop_tx.read().clone();
  37. if let Some(stop_tx) = sender {
  38. let _ = stop_tx.send(()).await;
  39. }
  40. }
  41. }
  42. impl AppFlowyServer for LocalServer {
  43. fn user_service(&self) -> Arc<dyn UserCloudService> {
  44. Arc::new(LocalServerUserAuthServiceImpl {
  45. db: self.local_db.clone(),
  46. })
  47. }
  48. fn folder_service(&self) -> Arc<dyn FolderCloudService> {
  49. Arc::new(LocalServerFolderCloudServiceImpl {
  50. db: self.local_db.clone(),
  51. })
  52. }
  53. fn database_service(&self) -> Arc<dyn DatabaseCloudService> {
  54. Arc::new(LocalServerDatabaseCloudServiceImpl())
  55. }
  56. fn document_service(&self) -> Arc<dyn DocumentCloudService> {
  57. Arc::new(LocalServerDocumentCloudServiceImpl())
  58. }
  59. fn file_storage(&self) -> Option<Arc<dyn FileStorageService>> {
  60. None
  61. }
  62. }