diff --git a/src/connection.rs b/src/connection.rs index c173d7b..8083d05 100644 --- a/src/connection.rs +++ b/src/connection.rs @@ -1074,6 +1074,21 @@ impl ConnectionManager { 0, true, opcua::client::DataChangeCallback::new(move |dv, item| { + // 检查是否有 BadNoSubscription 错误 + if let Some(status) = &dv.status { + if *status == opcua::types::StatusCode::BadNoSubscription { + tracing::warn!( + "Detected BadNoSubscription in data change callback for source {}, triggering reconnection", + current_source_id + ); + // 触发重连 + if let Some(tx) = manager.reconnect_tx.as_ref() { + let _ = tx.send(current_source_id); + } + return; + } + } + let client_handle = item.client_handle(); let val = dv.value; let timex = Some(Utc::now());