Midea/src/device.rs

68 lines
1.3 KiB
Rust
Raw Normal View History

2023-09-24 05:35:21 +00:00
use std::{net::UdpSocket, time::Duration};
use anyhow::Result;
use crate::{
security::{MsgType, Security},
DeviceInfo,
};
pub struct Device {
info: DeviceInfo,
socket: UdpSocket,
security: Security,
}
impl Device {
pub fn connect(info: DeviceInfo) -> Result<Self> {
let socket = UdpSocket::bind("0.0.0.0:0")?;
socket.set_write_timeout(Some(Duration::from_secs(10)))?;
socket.set_read_timeout(Some(Duration::from_secs(10)))?;
socket.connect(info.addr)?;
let mut me = Self {
info,
socket,
security: Security::default(),
};
if me.info.protocol == 3 {
me.authenticate()?;
}
me.refresh_status()?;
Ok(me)
}
fn authenticate(&mut self) -> Result<()> {
let request = self.security.encode_8370(MsgType::HANDSHAKE_REQUEST)?;
Ok(())
}
pub fn refresh_status(&self) -> Result<()> {
//
Ok(())
}
}
#[cfg(test)]
mod test {
use anyhow::Result;
use crate::{device::Device, Startup};
#[tokio::test]
async fn connect() -> Result<()> {
for device_info in Startup::discover().await? {
Device::connect(device_info)?;
}
Ok(())
}
}