From 7b7c8aa2aa2976977ddd33fe3016d8ea0412a40e Mon Sep 17 00:00:00 2001 From: Ondrej Babec Date: Fri, 25 Feb 2022 15:41:04 +0100 Subject: [PATCH] Optimize --- src/client/client_v5.rs | 37 ++++++++++++++++------------- src/network/network_trait.rs | 2 +- src/packet/auth_packet.rs | 2 +- src/packet/connack_packet.rs | 2 +- src/packet/connect_packet.rs | 2 +- src/packet/disconnect_packet.rs | 2 +- src/packet/puback_packet.rs | 2 +- src/packet/pubcomp_packet.rs | 2 +- src/packet/publish_packet.rs | 2 +- src/packet/pubrec_packet.rs | 2 +- src/packet/pubrel_packet.rs | 2 +- src/packet/suback_packet.rs | 2 +- src/packet/subscription_packet.rs | 2 +- src/packet/unsubscription_packet.rs | 2 +- src/tokio_network.rs | 2 ++ src/utils/buffer_writer.rs | 6 +++-- 16 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/client/client_v5.rs b/src/client/client_v5.rs index 6bd32a5..404d813 100644 --- a/src/client/client_v5.rs +++ b/src/client/client_v5.rs @@ -1,43 +1,46 @@ -use crate::packet::publish_packet::{PublishPacket, QualityOfService}; use crate::network::network_trait::{Network, NetworkError}; use crate::packet::connack_packet::ConnackPacket; use crate::packet::connect_packet::ConnectPacket; use crate::packet::disconnect_packet::DisconnectPacket; use crate::packet::mqtt_packet::Packet; +use crate::packet::publish_packet::{PublishPacket, QualityOfService}; use crate::packet::publish_packet::QualityOfService::QoS1; use crate::utils::buffer_reader::BuffReader; -pub struct MqttClientV5 { - network_driver: T, +pub struct MqttClientV5<'a, T, const MAX_PROPERTIES: usize> { + network_driver: &'a mut T, + buffer: &'a mut [u8] } -impl<'a, T, const MAX_PROPERTIES: usize> MqttClientV5 +impl<'a, T, const MAX_PROPERTIES: usize> MqttClientV5<'a, T, MAX_PROPERTIES> where T: Network { - pub fn new(network_driver: T) -> Self { + pub fn new(network_driver: &'a mut T, buffer: &'a mut [u8]) -> Self { Self { network_driver, + buffer } } // 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 self.network_driver.create_connection().await ?; let mut connect = ConnectPacket::<3, 0>::clean(); - let mut len = connect.encode(buffer); - self.network_driver.send(buffer, len).await ?; + let mut len = connect.encode(self.buffer); + + self.network_driver.send(self.buffer, len).await ?; //connack - let connack: ConnackPacket = self.receive::>(buffer).await ?; + let connack: ConnackPacket = self.receive::>().await ?; if connack.connect_reason_code != 0x00 { todo!(); } // publish let mut packet = PublishPacket::<5>::new(topic_name, message); - len = packet.encode(buffer); - self.network_driver.send(buffer, len).await ?; + len = packet.encode(self.buffer); + self.network_driver.send(self.buffer, len).await ?; //QoS1 if >::into(qos) == >::into(QoS1) { @@ -46,19 +49,19 @@ where //Disconnect let mut disconnect = DisconnectPacket::<5>::new(); - len = disconnect.encode(buffer); - self.network_driver.send(buffer, len); + len = disconnect.encode(self.buffer); + self.network_driver.send(self.buffer, len); Ok(()) } - pub async fn receive>(& mut self, buffer: &'a mut [u8]) -> Result { - self.network_driver.receive(buffer).await ?; + pub async fn receive>(&'a mut self) -> Result { + self.network_driver.receive(self.buffer).await ?; let mut packet = P::new(); - packet.decode(&mut BuffReader::new(buffer)); + packet.decode(&mut BuffReader::new(self.buffer)); 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(()); } } diff --git a/src/network/network_trait.rs b/src/network/network_trait.rs index 0065fa7..4d38b56 100644 --- a/src/network/network_trait.rs +++ b/src/network/network_trait.rs @@ -1,6 +1,6 @@ use core::fmt::Error; - use core::future::Future; + use crate::packet::mqtt_packet::Packet; pub enum NetworkError { diff --git a/src/packet/auth_packet.rs b/src/packet/auth_packet.rs index 4e7314a..d2fb850 100644 --- a/src/packet/auth_packet.rs +++ b/src/packet/auth_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_writer::BuffWriter; diff --git a/src/packet/connack_packet.rs b/src/packet/connack_packet.rs index 76601c1..3f0449e 100644 --- a/src/packet/connack_packet.rs +++ b/src/packet/connack_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_writer::BuffWriter; diff --git a/src/packet/connect_packet.rs b/src/packet/connect_packet.rs index aaf5a6c..77eaa72 100644 --- a/src/packet/connect_packet.rs +++ b/src/packet/connect_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BinaryData; use crate::utils::buffer_reader::BuffReader; diff --git a/src/packet/disconnect_packet.rs b/src/packet/disconnect_packet.rs index 2a85962..ca8cc5e 100644 --- a/src/packet/disconnect_packet.rs +++ b/src/packet/disconnect_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_writer::BuffWriter; diff --git a/src/packet/puback_packet.rs b/src/packet/puback_packet.rs index 384212e..9a51b85 100644 --- a/src/packet/puback_packet.rs +++ b/src/packet/puback_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_writer::BuffWriter; diff --git a/src/packet/pubcomp_packet.rs b/src/packet/pubcomp_packet.rs index 2b497d3..b067ca6 100644 --- a/src/packet/pubcomp_packet.rs +++ b/src/packet/pubcomp_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_writer::BuffWriter; diff --git a/src/packet/publish_packet.rs b/src/packet/publish_packet.rs index 10b46ba..1c94662 100644 --- a/src/packet/publish_packet.rs +++ b/src/packet/publish_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::packet::publish_packet::QualityOfService::{INVALID, QoS0, QoS1, QoS2}; use crate::utils::buffer_reader::BuffReader; diff --git a/src/packet/pubrec_packet.rs b/src/packet/pubrec_packet.rs index c256189..00a8428 100644 --- a/src/packet/pubrec_packet.rs +++ b/src/packet/pubrec_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_writer::BuffWriter; diff --git a/src/packet/pubrel_packet.rs b/src/packet/pubrel_packet.rs index e5c5035..2a25bd8 100644 --- a/src/packet/pubrel_packet.rs +++ b/src/packet/pubrel_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_writer::BuffWriter; diff --git a/src/packet/suback_packet.rs b/src/packet/suback_packet.rs index 6b073ca..b6e5adc 100644 --- a/src/packet/suback_packet.rs +++ b/src/packet/suback_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_writer::BuffWriter; diff --git a/src/packet/subscription_packet.rs b/src/packet/subscription_packet.rs index 9170b2a..5abfe78 100644 --- a/src/packet/subscription_packet.rs +++ b/src/packet/subscription_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_reader::TopicFilter; diff --git a/src/packet/unsubscription_packet.rs b/src/packet/unsubscription_packet.rs index e29d901..ae7ba7f 100644 --- a/src/packet/unsubscription_packet.rs +++ b/src/packet/unsubscription_packet.rs @@ -1,6 +1,6 @@ -use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use heapless::Vec; +use crate::encoding::variable_byte_integer::VariableByteIntegerEncoder; use crate::packet::mqtt_packet::Packet; use crate::utils::buffer_reader::BuffReader; use crate::utils::buffer_reader::TopicFilter; diff --git a/src/tokio_network.rs b/src/tokio_network.rs index 2e8ba69..47582cd 100644 --- a/src/tokio_network.rs +++ b/src/tokio_network.rs @@ -4,9 +4,11 @@ use core::borrow::BorrowMut; use core::fmt::Error; use core::future::Future; use core::ptr::null; + use embassy::io::WriteAll; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::net::{TcpListener, TcpStream}; + use crate::network::network_trait::{Network, NetworkError}; use crate::packet::mqtt_packet::Packet; diff --git a/src/utils/buffer_writer.rs b/src/utils/buffer_writer.rs index bb6f974..162821e 100644 --- a/src/utils/buffer_writer.rs +++ b/src/utils/buffer_writer.rs @@ -1,8 +1,10 @@ +use core::str; + +use heapless::Vec; + use crate::encoding::variable_byte_integer::{VariableByteInteger, VariableByteIntegerEncoder}; use crate::packet::property::Property; use crate::utils::buffer_reader::{BinaryData, EncodedString, StringPair, TopicFilter}; -use core::str; -use heapless::Vec; pub struct BuffWriter<'a> { buffer: &'a mut [u8],