set event stream to None in rust side

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou 2023-02-15 21:27:50 +08:00
parent bfaa463002
commit d8fe758604
3 changed files with 12 additions and 6 deletions

View File

@ -1389,6 +1389,7 @@ class FFI {
} }
} }
} }
debugPrint('Exit session event loop');
}(); }();
// every instance will bind a stream // every instance will bind a stream
this.id = id; this.id = id;

View File

@ -134,6 +134,14 @@ impl FlutterHandler {
stream.add(EventToUI::Event(out)); stream.add(EventToUI::Event(out));
} }
} }
pub fn close_event_stream(&mut self) {
let mut stream_lock = self.event_stream.write().unwrap();
if let Some(stream) = &*stream_lock {
stream.add(EventToUI::Event("close".to_owned()));
}
*stream_lock = None;
}
} }
impl InvokeUiSession for FlutterHandler { impl InvokeUiSession for FlutterHandler {

View File

@ -6,7 +6,7 @@ use crate::{
flutter::{session_add, session_start_}, flutter::{session_add, session_start_},
ui_interface::{self, *}, ui_interface::{self, *},
}; };
use flutter_rust_bridge::{StreamSink, SyncReturn, ZeroCopyBuffer}; use flutter_rust_bridge::{StreamSink, SyncReturn};
use hbb_common::{ use hbb_common::{
config::{self, LocalConfig, PeerConfig, ONLINE}, config::{self, LocalConfig, PeerConfig, ONLINE},
fs, log, fs, log,
@ -131,13 +131,10 @@ pub fn session_login(id: String, password: String, remember: bool) {
} }
pub fn session_close(id: String) { pub fn session_close(id: String) {
if let Some(session) = SESSIONS.read().unwrap().get(&id) { if let Some(mut session) = SESSIONS.write().unwrap().remove(&id) {
if let Some(stream) = &*session.event_stream.read().unwrap() { session.close_event_stream();
stream.add(EventToUI::Event("close".to_owned()));
}
session.close(); session.close();
} }
let _ = SESSIONS.write().unwrap().remove(&id);
} }
pub fn session_refresh(id: String) { pub fn session_refresh(id: String) {