homework: thermometer mock skeleton
This commit is contained in:
@@ -1,11 +1,19 @@
|
||||
/// Пример подключения нескольких клиентов к розетке. Изменение состояния любым из клиентов отражается на всех.
|
||||
|
||||
use smart_house::PowerSocket;
|
||||
use std::time::Duration;
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let power_socket0 = PowerSocket::connect("127.0.0.1:10001")?;
|
||||
let mut power_socket = PowerSocket::connect("127.0.0.1:10001")?;
|
||||
println!("{}", power_socket0.display());
|
||||
println!("{}", power_socket.display());
|
||||
|
||||
std::thread::sleep(Duration::from_secs(2));
|
||||
power_socket.set_on(!power_socket.is_on());
|
||||
|
||||
println!("{}", power_socket0.display());
|
||||
println!("{}", power_socket.display());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1,15 +1,13 @@
|
||||
/// Сервер-имитатор умной розетки
|
||||
use std::net::SocketAddr;
|
||||
use std::sync::{Arc, RwLock};
|
||||
use std::time::Duration;
|
||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||
|
||||
fn parse_args() -> SocketAddr {
|
||||
fn parse_args() -> Result<SocketAddr, Box<dyn std::error::Error>> {
|
||||
let mut args = std::env::args();
|
||||
args.next();
|
||||
args.next()
|
||||
.expect("server address should be passed as parameter")
|
||||
.parse()
|
||||
.expect("server address should be valid")
|
||||
Ok(args.next().ok_or(std::io::Error::other("no server address parameter specified"))?.parse()?)
|
||||
}
|
||||
|
||||
struct RealPowerSocket {
|
||||
@@ -77,7 +75,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let real_power_socket = Arc::new(RwLock::new(RealPowerSocket { power_rate: 12.0, on: false }));
|
||||
let rt = tokio::runtime::Builder::new_current_thread().enable_all().build()?;
|
||||
rt.block_on(async {
|
||||
let listener = tokio::net::TcpListener::bind(parse_args()).await?;
|
||||
let listener = tokio::net::TcpListener::bind(parse_args()?).await?;
|
||||
|
||||
loop {
|
||||
let (socket, _) = listener.accept().await?;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
/// Старый пример работы умного дома на заглушках
|
||||
|
||||
use smart_house::{Device, House, PowerSocket, PrintStatus, Room, Thermometer, room};
|
||||
|
||||
fn main() {
|
||||
|
||||
25
smart-house/src/bin/thermometer_mock.rs
Normal file
25
smart-house/src/bin/thermometer_mock.rs
Normal file
@@ -0,0 +1,25 @@
|
||||
use std::net::SocketAddr;
|
||||
use std::sync::{Arc, RwLock};
|
||||
use rand::prelude::*;
|
||||
|
||||
fn parse_args() -> Result<SocketAddr, Box<dyn std::error::Error>> {
|
||||
let mut args = std::env::args();
|
||||
args.next();
|
||||
Ok(args.next().ok_or(std::io::Error::other("no server address parameter specified"))?.parse()?)
|
||||
}
|
||||
fn generate_temperature() -> f32 {
|
||||
rand::rng().random_range(18.0..23.0)
|
||||
}
|
||||
|
||||
struct RealThermometer {
|
||||
temperature: f32
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let real_thermometer = Arc::new(RwLock::new(RealThermometer { temperature: generate_temperature()}));
|
||||
let rt = tokio::runtime::Builder::new_current_thread().enable_all().build()?;
|
||||
rt.block_on(async {
|
||||
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user