homework: smart house mocks example
This commit is contained in:
@@ -140,13 +140,13 @@
|
|||||||
- [x] Термометр может имитировать удалённое получение данных о температуре (для тестов).
|
- [x] Термометр может имитировать удалённое получение данных о температуре (для тестов).
|
||||||
|
|
||||||
Для имитатора умного термометра:
|
Для имитатора умного термометра:
|
||||||
- [ ] Реализован с использованием неблокирующего сетевого взаимодействия.
|
- [x] Реализован с использованием неблокирующего сетевого взаимодействия.
|
||||||
- [ ] Читает адрес для отправки UDP-пакетов и временной период отправки из файла.
|
- [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 rand::prelude::*;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::net::SocketAddr;
|
use std::net::{IpAddr, SocketAddr};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
@@ -41,7 +41,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
let params = read_parameters_from_file()?;
|
let params = read_parameters_from_file()?;
|
||||||
let rt = tokio::runtime::Builder::new_current_thread().enable_all().build()?;
|
let rt = tokio::runtime::Builder::new_current_thread().enable_all().build()?;
|
||||||
rt.block_on(async move {
|
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);
|
let mut interval = tokio::time::interval(params.interval);
|
||||||
loop {
|
loop {
|
||||||
interval.tick().await;
|
interval.tick().await;
|
||||||
|
|||||||
Reference in New Issue
Block a user