use zmq::Socket; use serde_json::Result; use bevy::{ecs::system::SystemState, prelude::*, render::Render}; use std::num::NonZero; use super::{laser::{LaserApi, LaserTimer}, tracks::{Frame, LaserPoints, RenderableLines, Track, TrackBundle}}; // use trap::{Frame, Track, TrackBundle}; // use tracks::Frame; // Because of world.insert_non_send_resource, this is an exclusive system // see: https://bevy-cheatbook.github.io/programming/exclusive.html fn setup_zmq(world: &mut World, params: &mut SystemState>) { let settings = params.get(world); let url = &settings.url; let context = zmq::Context::new(); let subscriber = context.socket(zmq::SUB).unwrap(); assert!(subscriber.connect(url).is_ok()); // let filter = "10001"; let filter = &settings.filter; //"msgs"; assert!(subscriber.set_subscribe(filter.as_bytes()).is_ok()); world.insert_non_send_resource(subscriber); // world.query::<>() } // fn receive_msg(subscriber: Socket) -> Result { // let mut items = [ // subscriber.as_poll_item(zmq::POLLIN) // ]; // let _nr = zmq::poll(&mut items, 0).unwrap(); // if items[0].is_readable() { // let json = subscriber.recv_string(0).unwrap().unwrap(); // // dbg!(&json[4..]); // // let msg: Frame = serde_json::from_str(&json[4..]).expect("No valid json?"); // let res: Result = serde_json::from_str(&json); // res // } else { // Err() // } // } fn receive_zmq_lines( subscriber: NonSend, mut lasers: Query<(&mut LaserApi, &mut LaserTimer)>, time: Res