From e0c52b49f3cbd41f7e1565b787443650e7183fff Mon Sep 17 00:00:00 2001 From: Kingtous Date: Tue, 28 Jun 2022 22:15:00 +0800 Subject: [PATCH] opt: add prefix identifier for each session Signed-off-by: Kingtous --- flutter/lib/models/model.dart | 1 + src/flutter.rs | 24 +++++++++++++++++------- src/flutter_ffi.rs | 2 +- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index b4b618666..e5e521035 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -924,6 +924,7 @@ class FFI { imageModel._id = id; cursorModel.id = id; } + id = isFileTransfer ? 'ft_${id}' : id; final stream = bind.sessionConnect(id: id, isFileTransfer: isFileTransfer); final cb = ffiModel.startEventListener(id); () async { diff --git a/src/flutter.rs b/src/flutter.rs index 1c9aa8bc9..4854a0e42 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -1,5 +1,5 @@ +use crate::common::make_fd_to_json; use crate::{client::*, flutter_ffi::EventToUI}; -use crate::common::{make_fd_to_json}; use flutter_rust_bridge::{StreamSink, ZeroCopyBuffer}; use hbb_common::{ allow_err, @@ -49,16 +49,17 @@ impl Session { /// /// # Arguments /// - /// * `id` - The id of the remote session. + /// * `id` - The identifier of the remote session with prefix. Regex: [\w]*[\_]*[\d]+ /// * `is_file_transfer` - If the session is used for file transfer. - pub fn start(id: &str, is_file_transfer: bool, events2ui: StreamSink) { - LocalConfig::set_remote_id(&id); + pub fn start(identifier: &str, is_file_transfer: bool, events2ui: StreamSink) { + LocalConfig::set_remote_id(&identifier); // TODO check same id + let session_id = get_session_id(identifier.to_owned()); // TODO close // Self::close(); let events2ui = Arc::new(RwLock::new(events2ui)); let mut session = Session { - id: id.to_owned(), + id: session_id.clone(), sender: Default::default(), lc: Default::default(), events2ui, @@ -67,11 +68,11 @@ impl Session { .lc .write() .unwrap() - .initialize(id.to_owned(), false, false); + .initialize(session_id.clone(), is_file_transfer, false); SESSIONS .write() .unwrap() - .insert(id.to_owned(), session.clone()); + .insert(identifier.to_owned(), session.clone()); std::thread::spawn(move || { Connection::start(session, is_file_transfer); }); @@ -1658,3 +1659,12 @@ pub mod connection_manager { } } } + +#[inline] +pub fn get_session_id(id: String) -> String { + return if let Some(index) = id.find('_') { + id[index + 1..].to_string() + } else { + id + }; +} diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 22243ca79..650a7b0b0 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1,7 +1,7 @@ use crate::client::file_trait::FileManager; +use crate::common::make_fd_to_json; use crate::flutter::connection_manager::{self, get_clients_length, get_clients_state}; use crate::flutter::{self, Session, SESSIONS}; -use crate::common::make_fd_to_json; use crate::start_server; use crate::ui_interface; use flutter_rust_bridge::{StreamSink, SyncReturn, ZeroCopyBuffer};