Optimize
This commit is contained in:
parent
1e3f8e8302
commit
7b7c8aa2aa
|
@ -1,43 +1,46 @@
|
||||||
use crate::packet::publish_packet::{PublishPacket, QualityOfService};
|
|
||||||
use crate::network::network_trait::{Network, NetworkError};
|
use crate::network::network_trait::{Network, NetworkError};
|
||||||
use crate::packet::connack_packet::ConnackPacket;
|
use crate::packet::connack_packet::ConnackPacket;
|
||||||
use crate::packet::connect_packet::ConnectPacket;
|
use crate::packet::connect_packet::ConnectPacket;
|
||||||
use crate::packet::disconnect_packet::DisconnectPacket;
|
use crate::packet::disconnect_packet::DisconnectPacket;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
|
use crate::packet::publish_packet::{PublishPacket, QualityOfService};
|
||||||
use crate::packet::publish_packet::QualityOfService::QoS1;
|
use crate::packet::publish_packet::QualityOfService::QoS1;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
|
|
||||||
pub struct MqttClientV5<T, const MAX_PROPERTIES: usize> {
|
pub struct MqttClientV5<'a, T, const MAX_PROPERTIES: usize> {
|
||||||
network_driver: T,
|
network_driver: &'a mut T,
|
||||||
|
buffer: &'a mut [u8]
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T, const MAX_PROPERTIES: usize> MqttClientV5<T, MAX_PROPERTIES>
|
impl<'a, T, const MAX_PROPERTIES: usize> MqttClientV5<'a, T, MAX_PROPERTIES>
|
||||||
where
|
where
|
||||||
T: Network
|
T: Network
|
||||||
{
|
{
|
||||||
pub fn new(network_driver: T) -> Self {
|
pub fn new(network_driver: &'a mut T, buffer: &'a mut [u8]) -> Self {
|
||||||
Self {
|
Self {
|
||||||
network_driver,
|
network_driver,
|
||||||
|
buffer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// connect -> connack -> publish -> QoS ? -> disconn
|
// connect -> connack -> publish -> QoS ? -> disconn
|
||||||
pub async fn send_message(& mut self, topic_name: & str, message: & str, buffer: &'a mut [u8], qos: QualityOfService) -> Result<(), NetworkError> {
|
pub async fn send_message(&'a mut self, topic_name: & str, message: & str, qos: QualityOfService) -> Result<(), NetworkError> {
|
||||||
//connect
|
//connect
|
||||||
self.network_driver.create_connection().await ?;
|
self.network_driver.create_connection().await ?;
|
||||||
|
|
||||||
let mut connect = ConnectPacket::<3, 0>::clean();
|
let mut connect = ConnectPacket::<3, 0>::clean();
|
||||||
let mut len = connect.encode(buffer);
|
let mut len = connect.encode(self.buffer);
|
||||||
self.network_driver.send(buffer, len).await ?;
|
|
||||||
|
self.network_driver.send(self.buffer, len).await ?;
|
||||||
//connack
|
//connack
|
||||||
let connack: ConnackPacket<MAX_PROPERTIES> = self.receive::<ConnackPacket<MAX_PROPERTIES>>(buffer).await ?;
|
let connack: ConnackPacket<MAX_PROPERTIES> = self.receive::<ConnackPacket<MAX_PROPERTIES>>().await ?;
|
||||||
if connack.connect_reason_code != 0x00 {
|
if connack.connect_reason_code != 0x00 {
|
||||||
todo!();
|
todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
// publish
|
// publish
|
||||||
let mut packet = PublishPacket::<5>::new(topic_name, message);
|
let mut packet = PublishPacket::<5>::new(topic_name, message);
|
||||||
len = packet.encode(buffer);
|
len = packet.encode(self.buffer);
|
||||||
self.network_driver.send(buffer, len).await ?;
|
self.network_driver.send(self.buffer, len).await ?;
|
||||||
|
|
||||||
//QoS1
|
//QoS1
|
||||||
if <QualityOfService as Into<u8>>::into(qos) == <QualityOfService as Into<u8>>::into(QoS1) {
|
if <QualityOfService as Into<u8>>::into(qos) == <QualityOfService as Into<u8>>::into(QoS1) {
|
||||||
|
@ -46,19 +49,19 @@ where
|
||||||
|
|
||||||
//Disconnect
|
//Disconnect
|
||||||
let mut disconnect = DisconnectPacket::<5>::new();
|
let mut disconnect = DisconnectPacket::<5>::new();
|
||||||
len = disconnect.encode(buffer);
|
len = disconnect.encode(self.buffer);
|
||||||
self.network_driver.send(buffer, len);
|
self.network_driver.send(self.buffer, len);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn receive<P: Packet<'a>>(& mut self, buffer: &'a mut [u8]) -> Result<P, NetworkError> {
|
pub async fn receive<P: Packet<'p>>(&'a mut self) -> Result<P, NetworkError> {
|
||||||
self.network_driver.receive(buffer).await ?;
|
self.network_driver.receive(self.buffer).await ?;
|
||||||
let mut packet = P::new();
|
let mut packet = P::new();
|
||||||
packet.decode(&mut BuffReader::new(buffer));
|
packet.decode(&mut BuffReader::new(self.buffer));
|
||||||
return Ok(packet);
|
return Ok(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn receive_message(& mut self, buffer: & mut [u8]) -> Result<(), NetworkError> {
|
pub async fn receive_message(&'a mut self) -> Result<(), NetworkError> {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use core::fmt::Error;
|
use core::fmt::Error;
|
||||||
|
|
||||||
use core::future::Future;
|
use core::future::Future;
|
||||||
|
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
|
|
||||||
pub enum NetworkError {
|
pub enum NetworkError {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_writer::BuffWriter;
|
use crate::utils::buffer_writer::BuffWriter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_writer::BuffWriter;
|
use crate::utils::buffer_writer::BuffWriter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BinaryData;
|
use crate::utils::buffer_reader::BinaryData;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_writer::BuffWriter;
|
use crate::utils::buffer_writer::BuffWriter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_writer::BuffWriter;
|
use crate::utils::buffer_writer::BuffWriter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_writer::BuffWriter;
|
use crate::utils::buffer_writer::BuffWriter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::packet::publish_packet::QualityOfService::{INVALID, QoS0, QoS1, QoS2};
|
use crate::packet::publish_packet::QualityOfService::{INVALID, QoS0, QoS1, QoS2};
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_writer::BuffWriter;
|
use crate::utils::buffer_writer::BuffWriter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_writer::BuffWriter;
|
use crate::utils::buffer_writer::BuffWriter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_writer::BuffWriter;
|
use crate::utils::buffer_writer::BuffWriter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_reader::TopicFilter;
|
use crate::utils::buffer_reader::TopicFilter;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
|
||||||
use heapless::Vec;
|
use heapless::Vec;
|
||||||
|
|
||||||
|
use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder;
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
use crate::utils::buffer_reader::BuffReader;
|
use crate::utils::buffer_reader::BuffReader;
|
||||||
use crate::utils::buffer_reader::TopicFilter;
|
use crate::utils::buffer_reader::TopicFilter;
|
||||||
|
|
|
@ -4,9 +4,11 @@ use core::borrow::BorrowMut;
|
||||||
use core::fmt::Error;
|
use core::fmt::Error;
|
||||||
use core::future::Future;
|
use core::future::Future;
|
||||||
use core::ptr::null;
|
use core::ptr::null;
|
||||||
|
|
||||||
use embassy::io::WriteAll;
|
use embassy::io::WriteAll;
|
||||||
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
use tokio::io::{AsyncReadExt, AsyncWriteExt};
|
||||||
use tokio::net::{TcpListener, TcpStream};
|
use tokio::net::{TcpListener, TcpStream};
|
||||||
|
|
||||||
use crate::network::network_trait::{Network, NetworkError};
|
use crate::network::network_trait::{Network, NetworkError};
|
||||||
use crate::packet::mqtt_packet::Packet;
|
use crate::packet::mqtt_packet::Packet;
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
use core::str;
|
||||||
|
|
||||||
|
use heapless::Vec;
|
||||||
|
|
||||||
use crate::encoding::variable_byte_integer::{VariableByteInteger, VariableByteIntegerEncoder};
|
use crate::encoding::variable_byte_integer::{VariableByteInteger, VariableByteIntegerEncoder};
|
||||||
use crate::packet::property::Property;
|
use crate::packet::property::Property;
|
||||||
use crate::utils::buffer_reader::{BinaryData, EncodedString, StringPair, TopicFilter};
|
use crate::utils::buffer_reader::{BinaryData, EncodedString, StringPair, TopicFilter};
|
||||||
use core::str;
|
|
||||||
use heapless::Vec;
|
|
||||||
|
|
||||||
pub struct BuffWriter<'a> {
|
pub struct BuffWriter<'a> {
|
||||||
buffer: &'a mut [u8],
|
buffer: &'a mut [u8],
|
||||||
|
|
Loading…
Reference in New Issue
Block a user