notifier.rs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. use crate::entities::{UserProfile, UserStatus};
  2. use flowy_net::entities::NetworkType;
  3. use tokio::sync::{broadcast, mpsc};
  4. pub struct UserNotifier {
  5. user_status_notifier: broadcast::Sender<UserStatus>,
  6. network_status_notifier: broadcast::Sender<NetworkType>,
  7. }
  8. impl std::default::Default for UserNotifier {
  9. fn default() -> Self {
  10. let (user_status_notifier, _) = broadcast::channel(10);
  11. let (network_status_notifier, _) = broadcast::channel(10);
  12. UserNotifier {
  13. user_status_notifier,
  14. network_status_notifier,
  15. }
  16. }
  17. }
  18. impl UserNotifier {
  19. pub(crate) fn new() -> Self { UserNotifier::default() }
  20. pub(crate) fn notify_login(&self, token: &str) {
  21. let _ = self.user_status_notifier.send(UserStatus::Login {
  22. token: token.to_owned(),
  23. });
  24. }
  25. pub(crate) fn notify_sign_up(&self, ret: mpsc::Sender<()>, user_profile: &UserProfile) {
  26. let _ = self.user_status_notifier.send(UserStatus::SignUp {
  27. profile: user_profile.clone(),
  28. ret,
  29. });
  30. }
  31. pub(crate) fn notify_logout(&self, token: &str) {
  32. let _ = self.user_status_notifier.send(UserStatus::Logout {
  33. token: token.to_owned(),
  34. });
  35. }
  36. pub fn update_network_type(&self, ty: &NetworkType) { let _ = self.network_status_notifier.send(ty.clone()); }
  37. pub fn user_status_subscribe(&self) -> broadcast::Receiver<UserStatus> { self.user_status_notifier.subscribe() }
  38. pub fn network_type_subscribe(&self) -> broadcast::Receiver<NetworkType> {
  39. self.network_status_notifier.subscribe()
  40. }
  41. }