homework: smart house mocks example
This commit is contained in:
@@ -140,13 +140,13 @@
|
||||
- [x] Термометр может имитировать удалённое получение данных о температуре (для тестов).
|
||||
|
||||
Для имитатора умного термометра:
|
||||
- [ ] Реализован с использованием неблокирующего сетевого взаимодействия.
|
||||
- [ ] Читает адрес для отправки UDP-пакетов и временной период отправки из файла.
|
||||
- [ ] Отправляет произвольное значение температуры на указанный адрес с указанной периодичностью.
|
||||
- [x] Реализован с использованием неблокирующего сетевого взаимодействия.
|
||||
- [x] Читает адрес для отправки UDP-пакетов и временной период отправки из файла.
|
||||
- [x] Отправляет произвольное значение температуры на указанный адрес с указанной периодичностью.
|
||||
|
||||
Добавлен дополнительный пример умного дома с розетками и термометрами, которые работают с имитаторами. Данный пример должен запускаться и:
|
||||
- [ ] Выводить отчёт о состоянии дома, если имитаторы запущены.
|
||||
- [ ] Сообщать об ошибке, если устройству не удалось получить данные.
|
||||
- [x] Выводить отчёт о состоянии дома, если имитаторы запущены.
|
||||
- [x] Сообщать об ошибке, если устройству не удалось получить данные.
|
||||
|
||||
**Критерии оценки:**
|
||||
|
||||
|
||||
25
smart-house/src/bin/mocks_example.rs
Normal file
25
smart-house/src/bin/mocks_example.rs
Normal file
@@ -0,0 +1,25 @@
|
||||
//! Пример работы умного дома с имитаторами
|
||||
|
||||
use smart_house::{House, PowerSocket, PrintStatus, Room, Thermometer, room};
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let house = create_house_demo()?;
|
||||
house.print_status();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn create_house_demo() -> Result<House, Box<dyn std::error::Error>> {
|
||||
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)
|
||||
}
|
||||
@@ -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<dyn std::error::Error>> {
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user