mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-06-06 17:32:51 +08:00
debug, query_onlines_block_thread
Signed-off-by: dignow <linlong1265@gmail.com>
This commit is contained in:
parent
5a51284550
commit
02bc5e3111
@ -82,7 +82,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
|
||||
final _curPeers = <String>{};
|
||||
var _lastChangeTime = DateTime.now();
|
||||
var _lastQueryPeers = <String>{};
|
||||
var _lastQueryTime = DateTime.now().subtract(const Duration(hours: 1));
|
||||
var _lastQueryTime = DateTime.now().add(const Duration(seconds: 30));
|
||||
var _queryCount = 0;
|
||||
var _exit = false;
|
||||
|
||||
@ -272,8 +272,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
|
||||
if (_queryCount < _maxQueryCount) {
|
||||
if (now.difference(_lastQueryTime) >= _queryInterval) {
|
||||
if (_curPeers.isNotEmpty) {
|
||||
platformFFI.ffiBind
|
||||
.queryOnlines(ids: _curPeers.toList(growable: false));
|
||||
bind.queryOnlines(ids: _curPeers.toList(growable: false));
|
||||
_lastQueryTime = DateTime.now();
|
||||
_queryCount += 1;
|
||||
}
|
||||
@ -287,7 +286,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
|
||||
|
||||
_queryOnlines(bool isLoadEvent) {
|
||||
if (_curPeers.isNotEmpty) {
|
||||
platformFFI.ffiBind.queryOnlines(ids: _curPeers.toList(growable: false));
|
||||
bind.queryOnlines(ids: _curPeers.toList(growable: false));
|
||||
_lastQueryPeers = {..._curPeers};
|
||||
if (isLoadEvent) {
|
||||
_lastChangeTime = DateTime.now();
|
||||
|
@ -1602,7 +1602,7 @@ pub(super) mod async_tasks {
|
||||
use hbb_common::{
|
||||
bail,
|
||||
tokio::{
|
||||
select,
|
||||
self, select,
|
||||
sync::mpsc::{unbounded_channel, UnboundedSender},
|
||||
},
|
||||
ResultType,
|
||||
@ -1617,26 +1617,9 @@ pub(super) mod async_tasks {
|
||||
static ref TX_QUERY_ONLINES: Arc<Mutex<Option<TxQueryOnlines>>> = Default::default();
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn start_flutter_async_runner() {
|
||||
std::thread::spawn(|| async {
|
||||
let (tx_onlines, mut rx_onlines) = unbounded_channel::<Vec<String>>();
|
||||
TX_QUERY_ONLINES.lock().unwrap().replace(tx_onlines);
|
||||
loop {
|
||||
select! {
|
||||
ids = rx_onlines.recv() => {
|
||||
match ids {
|
||||
Some(_ids) => {
|
||||
#[cfg(not(any(target_os = "ios")))]
|
||||
crate::rendezvous_mediator::query_online_states(_ids, handle_query_onlines)
|
||||
}
|
||||
None => {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
std::thread::spawn(start_flutter_async_runner_);
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
@ -1644,9 +1627,31 @@ pub(super) mod async_tasks {
|
||||
let _ = TX_QUERY_ONLINES.lock().unwrap().take();
|
||||
}
|
||||
|
||||
#[tokio::main(flavor = "current_thread")]
|
||||
async fn start_flutter_async_runner_() {
|
||||
let (tx_onlines, mut rx_onlines) = unbounded_channel::<Vec<String>>();
|
||||
TX_QUERY_ONLINES.lock().unwrap().replace(tx_onlines);
|
||||
|
||||
loop {
|
||||
select! {
|
||||
ids = rx_onlines.recv() => {
|
||||
match ids {
|
||||
Some(_ids) => {
|
||||
#[cfg(not(any(target_os = "ios")))]
|
||||
crate::rendezvous_mediator::query_online_states(_ids, handle_query_onlines).await
|
||||
}
|
||||
None => {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn query_onlines(ids: Vec<String>) -> ResultType<()> {
|
||||
if let Some(tx) = TX_QUERY_ONLINES.lock().unwrap().as_ref() {
|
||||
tx.send(ids)?;
|
||||
let _ = tx.send(ids)?;
|
||||
} else {
|
||||
bail!("No tx_query_onlines");
|
||||
}
|
||||
|
@ -572,7 +572,6 @@ async fn direct_server(server: ServerPtr) {
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::main(flavor = "current_thread")]
|
||||
pub async fn query_online_states<F: FnOnce(Vec<String>, Vec<String>)>(ids: Vec<String>, f: F) {
|
||||
let test = false;
|
||||
if test {
|
||||
@ -598,7 +597,11 @@ pub async fn query_online_states<F: FnOnce(Vec<String>, Vec<String>)>(ids: Vec<S
|
||||
}
|
||||
|
||||
if query_begin.elapsed() > query_timeout {
|
||||
log::debug!("query onlines timeout {:?} ({:?})", query_begin.elapsed(), query_timeout);
|
||||
log::debug!(
|
||||
"query onlines timeout {:?} ({:?})",
|
||||
query_begin.elapsed(),
|
||||
query_timeout
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -679,8 +682,10 @@ async fn query_online_states_(
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[test]
|
||||
fn test_query_onlines() {
|
||||
use hbb_common::tokio;
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_query_onlines() {
|
||||
super::query_online_states(
|
||||
vec![
|
||||
"152183996".to_owned(),
|
||||
@ -691,6 +696,7 @@ mod tests {
|
||||
|onlines: Vec<String>, offlines: Vec<String>| {
|
||||
println!("onlines: {:?}, offlines: {:?}", &onlines, &offlines);
|
||||
},
|
||||
);
|
||||
)
|
||||
.await;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user