1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//! Readings receiver that actually processes all readings coming from services.

use crate::db::*;
use crate::reading::*;
use crate::threading;
use crate::Result;
use bus::Bus;
use log::info;
use std::sync::{Arc, Mutex};

/// Start readings receiver thread.
pub fn spawn(bus: &mut Bus<Message>, db: Arc<Mutex<Db>>) -> Result<()> {
    info!("Spawning message receiver…");
    let rx = bus.add_rx();
    threading::spawn("my-iot::receiver", move || {
        for message in rx {
            info!("{}: {:?}", &message.reading.sensor, &message.reading.value);
            if message.type_ == Type::Actual {
                db.lock().unwrap().insert_reading(&message.reading).unwrap();
            }
        }
        unreachable!();
    })?;
    Ok(())
}