Fix Tokio runtime error - use std::thread instead of tokio::spawn for EventBus
This commit is contained in:
parent
4f9085f728
commit
653eb07444
|
|
@ -2,7 +2,7 @@ use std::collections::HashMap;
|
|||
use std::sync::{Arc, Mutex};
|
||||
use serde_json::Value;
|
||||
use tauri::{AppHandle, Manager};
|
||||
use tokio::sync::mpsc;
|
||||
use std::sync::mpsc as std_mpsc;
|
||||
use tracing::{debug, info};
|
||||
use uuid::Uuid;
|
||||
|
||||
|
|
@ -10,7 +10,7 @@ pub type EventHandler = Box<dyn Fn(Value) + Send + Sync>;
|
|||
|
||||
pub struct EventBus {
|
||||
subscribers: Arc<Mutex<HashMap<String, Vec<(SubscriptionId, EventHandler)>>>>,
|
||||
sender: mpsc::UnboundedSender<Event>,
|
||||
sender: std_mpsc::Sender<Event>,
|
||||
}
|
||||
|
||||
pub type SubscriptionId = String;
|
||||
|
|
@ -25,13 +25,13 @@ pub struct Event {
|
|||
|
||||
impl EventBus {
|
||||
pub fn new() -> Self {
|
||||
let (sender, mut receiver) = mpsc::unbounded_channel::<Event>();
|
||||
let (sender, receiver) = std_mpsc::channel::<Event>();
|
||||
let subscribers: Arc<Mutex<HashMap<String, Vec<(SubscriptionId, EventHandler)>>>> = Arc::new(Mutex::new(HashMap::new()));
|
||||
let subs_clone = subscribers.clone();
|
||||
|
||||
// Event dispatch loop
|
||||
tokio::spawn(async move {
|
||||
while let Some(event) = receiver.recv().await {
|
||||
// Event dispatch loop (using std::thread instead of tokio::spawn)
|
||||
std::thread::spawn(move || {
|
||||
while let Ok(event) = receiver.recv() {
|
||||
let subs = subs_clone.lock().unwrap();
|
||||
if let Some(handlers) = subs.get(&event.event_type) {
|
||||
for (_, handler) in handlers.iter() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue