diff --git a/smart-house/README.md b/smart-house/README.md index dfa38fb..015353d 100644 --- a/smart-house/README.md +++ b/smart-house/README.md @@ -140,13 +140,13 @@ - [x] Термометр может имитировать удалённое получение данных о температуре (для тестов). Для имитатора умного термометра: -- [ ] Реализован с использованием неблокирующего сетевого взаимодействия. -- [ ] Читает адрес для отправки UDP-пакетов и временной период отправки из файла. -- [ ] Отправляет произвольное значение температуры на указанный адрес с указанной периодичностью. +- [x] Реализован с использованием неблокирующего сетевого взаимодействия. +- [x] Читает адрес для отправки UDP-пакетов и временной период отправки из файла. +- [x] Отправляет произвольное значение температуры на указанный адрес с указанной периодичностью. Добавлен дополнительный пример умного дома с розетками и термометрами, которые работают с имитаторами. Данный пример должен запускаться и: -- [ ] Выводить отчёт о состоянии дома, если имитаторы запущены. -- [ ] Сообщать об ошибке, если устройству не удалось получить данные. +- [x] Выводить отчёт о состоянии дома, если имитаторы запущены. +- [x] Сообщать об ошибке, если устройству не удалось получить данные. **Критерии оценки:** diff --git a/smart-house/src/bin/mocks_example.rs b/smart-house/src/bin/mocks_example.rs new file mode 100644 index 0000000..85829a6 --- /dev/null +++ b/smart-house/src/bin/mocks_example.rs @@ -0,0 +1,25 @@ +//! Пример работы умного дома с имитаторами + +use smart_house::{House, PowerSocket, PrintStatus, Room, Thermometer, room}; + +fn main() -> Result<(), Box> { + let house = create_house_demo()?; + house.print_status(); + Ok(()) +} + +fn create_house_demo() -> Result> { + println!("# Create new smart house"); + let house = House::new( + [( + "Main".to_string(), + room!( + "PSocA" => PowerSocket::connect("127.0.0.1:10001")?, + "ThermA" => Thermometer::connect("127.0.0.1:10002")?, + ), + )] + .into_iter() + .collect(), + ); + Ok(house) +} diff --git a/smart-house/src/bin/thermometer_mock.rs b/smart-house/src/bin/thermometer_mock.rs index 30999ac..1a3004c 100644 --- a/smart-house/src/bin/thermometer_mock.rs +++ b/smart-house/src/bin/thermometer_mock.rs @@ -2,7 +2,7 @@ use rand::prelude::*; use std::io::Read; -use std::net::SocketAddr; +use std::net::{IpAddr, SocketAddr}; use std::str::FromStr; use std::sync::Arc; use std::time::Duration; @@ -41,7 +41,7 @@ fn main() -> Result<(), Box> { let params = read_parameters_from_file()?; let rt = tokio::runtime::Builder::new_current_thread().enable_all().build()?; rt.block_on(async move { - let socket = Arc::new(tokio::net::UdpSocket::bind(params.addr).await?); + let socket = Arc::new(tokio::net::UdpSocket::bind(SocketAddr::new(IpAddr::from([127, 0, 0, 1]), 10003)).await?); let mut interval = tokio::time::interval(params.interval); loop { interval.tick().await;