chore: migrate collab actors to appflowy-collaborate (#556)

This commit is contained in:
Khor Shu Heng 2024-05-17 12:22:43 +08:00 committed by GitHub
parent 2fae260e4f
commit fbdcbd6e08
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 28 additions and 17 deletions

4
Cargo.lock generated
View File

@ -631,6 +631,8 @@ name = "appflowy-collaborate"
version = "0.1.0"
dependencies = [
"access-control",
"actix",
"actix-web-actors",
"anyhow",
"app-error",
"async-stream",
@ -649,6 +651,7 @@ dependencies = [
"database-entity",
"futures",
"futures-util",
"governor",
"indexmap 2.2.5",
"itertools 0.12.0",
"lazy_static",
@ -660,6 +663,7 @@ dependencies = [
"semver",
"serde",
"serde_json",
"serde_repr",
"sqlx",
"thiserror",
"tokio",

View File

@ -6,7 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
actix = "0.13.3"
actix.workspace = true
actix-web = { version = "4.5.1", default-features = false, features = ["openssl", "compress-brotli", "compress-gzip"] }
actix-http = { workspace = true, default-features = false, features = ["openssl", "compress-brotli", "compress-gzip"] }
actix-rt = "2.9.0"
@ -19,6 +19,7 @@ openssl = { version = "0.10.62", features = ["vendored"] }
# serde
serde_json.workspace = true
serde_repr.workspace = true
serde.workspace = true
tokio = { workspace = true, features = [
@ -95,7 +96,7 @@ shared-entity = { path = "libs/shared-entity", features = ["cloud"] }
workspace-template = { workspace = true }
collab-rt-entity.workspace = true
collab-stream.workspace = true
serde_repr = "0.1.18"
tonic-build = "0.11.0"
log = "0.4.20"
lettre = { version = "0.11.7", features = ["tokio1", "tokio1-native-tls"] }
@ -171,11 +172,13 @@ async-trait = "0.1.77"
prometheus-client = "0.22.0"
collab-stream = { path = "libs/collab-stream" }
serde_json = "1.0.111"
serde_repr = "0.1.18"
serde = { version = "1.0.195", features = ["derive"] }
bytes = "1.5.0"
workspace-template = { path = "libs/workspace-template" }
uuid = { version = "1.6.1", features = ["v4"] }
anyhow = "1.0.79"
actix = "0.13.3"
actix-http = { version = "3.6.0", default-features = false }
tokio = { version = "1.36.0", features = ["sync"] }
tokio-stream = "0.1.14"

View File

@ -13,6 +13,8 @@ path = "src/lib.rs"
[dependencies]
access-control.workspace = true
actix.workspace = true
actix-web-actors = { version = "4.3" }
app-error = { workspace = true, features = ["sqlx_error", "tokio_error"] }
dashmap.workspace = true
async-stream.workspace = true
@ -25,6 +27,7 @@ tokio = { workspace = true, features = ["net", "sync", "macros", "rt-multi-threa
async-trait = "0.1.77"
serde.workspace = true
serde_json.workspace = true
serde_repr.workspace = true
sqlx = { workspace = true, default-features = false, features = ["runtime-tokio-rustls", "macros", "postgres", "uuid", "chrono"] }
thiserror = "1.0.56"
anyhow = "1"
@ -37,6 +40,7 @@ collab-folder = { workspace = true }
collab-document = { workspace = true }
database.workspace = true
database-entity.workspace = true
governor = { version = "0.6.3" }
yrs.workspace = true
chrono = "0.4.31"
collab-rt-entity = { workspace = true, features = ["actix_message"] }

View File

@ -1,4 +1,6 @@
use crate::biz::actix_ws::entities::{ClientMessage, Connect, Disconnect, RealtimeMessage};
use crate::actix_ws::entities::{ClientMessage, Connect, Disconnect, RealtimeMessage};
use crate::error::RealtimeError;
use crate::RealtimeClientWebsocketSink;
use actix::{
fut, Actor, ActorContext, ActorFutureExt, Addr, AsyncContext, Context, ContextFutureSpawner,
Handler, MailboxError, Recipient, ResponseFuture, Running, StreamHandler, WrapFuture,
@ -6,8 +8,6 @@ use actix::{
use actix_web_actors::ws;
use actix_web_actors::ws::{CloseCode, CloseReason, ProtocolError, WebsocketContext};
use anyhow::anyhow;
use appflowy_collaborate::error::RealtimeError;
use appflowy_collaborate::RealtimeClientWebsocketSink;
use async_trait::async_trait;
use bytes::Bytes;
use collab_rt_entity::user::RealtimeUser;

View File

@ -1,5 +1,5 @@
use crate::error::RealtimeError;
use actix::{Message, Recipient};
use appflowy_collaborate::error::RealtimeError;
use serde_repr::{Deserialize_repr, Serialize_repr};
use std::fmt::Debug;

View File

@ -3,14 +3,14 @@ use std::ops::Deref;
use actix::{Actor, Context, Handler, ResponseFuture};
use tracing::{error, info, warn};
use crate::error::RealtimeError;
use crate::CollaborationServer;
use access_control::collab::RealtimeAccessControl;
use appflowy_collaborate::error::RealtimeError;
use appflowy_collaborate::CollaborationServer;
use collab_rt_entity::user::UserDevice;
use database::collab::CollabStorage;
use crate::biz::actix_ws::client::rt_client::{RealtimeClientWebsocketSinkImpl, RealtimeServer};
use crate::biz::actix_ws::entities::{ClientMessage, ClientStreamMessage, Connect, Disconnect};
use crate::actix_ws::client::rt_client::{RealtimeClientWebsocketSinkImpl, RealtimeServer};
use crate::actix_ws::entities::{ClientMessage, ClientStreamMessage, Connect, Disconnect};
#[derive(Clone)]
pub struct RealtimeServerActor<S, AC>(pub CollaborationServer<S, AC>);

View File

@ -1,3 +1,4 @@
pub mod actix_ws;
mod client;
pub mod collab;
pub mod command;

View File

@ -16,6 +16,7 @@ use validator::Validate;
use access_control::collab::CollabAccessControl;
use app_error::AppError;
use appflowy_collaborate::actix_ws::entities::ClientStreamMessage;
use collab_rt_entity::realtime_proto::HttpRealtimeMessage;
use collab_rt_entity::RealtimeMessage;
use collab_rt_protocol::validate_encode_collab;
@ -29,7 +30,6 @@ use shared_entity::response::{AppResponse, JsonAppResponse};
use crate::api::util::{compress_type_from_header_value, device_id_from_headers, CollabValidator};
use crate::api::ws::RealtimeServerAddr;
use crate::biz;
use crate::biz::actix_ws::entities::ClientStreamMessage;
use crate::biz::user::auth::jwt::UserUuid;
use crate::biz::workspace;
use crate::domain::compression::{decompress, CompressionType, X_COMPRESSION_TYPE};

View File

@ -12,13 +12,13 @@ use tokio::sync::mpsc::Sender;
use tracing::{debug, error, instrument, trace};
use app_error::AppError;
use appflowy_collaborate::actix_ws::client::rt_client::RealtimeClient;
use appflowy_collaborate::actix_ws::server::RealtimeServerActor;
use appflowy_collaborate::collab::access_control::RealtimeCollabAccessControlImpl;
use collab_rt_entity::user::{AFUserChange, RealtimeUser, UserMessage};
use collab_rt_entity::RealtimeMessage;
use shared_entity::response::AppResponseError;
use crate::biz::actix_ws::client::rt_client::RealtimeClient;
use crate::biz::actix_ws::server::RealtimeServerActor;
use crate::biz::collab::storage::CollabAccessControlStorage;
use crate::biz::user::auth::jwt::{authorization_from_token, UserUuid};
use crate::state::AppState;

View File

@ -9,7 +9,6 @@ use access_control::access::{enable_access_control, AccessControl};
use crate::api::ai_tool::ai_tool_scope;
use crate::api::chat::chat_scope;
use crate::biz::actix_ws::server::RealtimeServerActor;
use crate::biz::collab::access_control::{
CollabMiddlewareAccessControl, CollabStorageAccessControlImpl,
};
@ -31,6 +30,7 @@ use actix_web::cookie::Key;
use actix_web::{dev::Server, web, web::Data, App, HttpServer};
use anyhow::{Context, Error};
use appflowy_ai_client::client::AppFlowyAIClient;
use appflowy_collaborate::actix_ws::server::RealtimeServerActor;
use appflowy_collaborate::collab::access_control::{
CollabAccessControlImpl, RealtimeCollabAccessControlImpl,
};

View File

@ -1,4 +1,3 @@
pub mod actix_ws;
pub mod chat;
pub mod collab;
pub mod pg_listener;

View File

@ -1,8 +1,8 @@
use actix::{Actor, Context, Handler};
use appflowy_cloud::biz::actix_ws::client::rt_client::{
use appflowy_collaborate::actix_ws::client::rt_client::{
HandlerResult, RealtimeClient, RealtimeServer,
};
use appflowy_cloud::biz::actix_ws::entities::{ClientMessage, Connect, Disconnect};
use appflowy_collaborate::actix_ws::entities::{ClientMessage, Connect, Disconnect};
use collab_rt_entity::user::RealtimeUser;
use collab_rt_entity::RealtimeMessage;
use semver::Version;