This commit is contained in:
Ondrej Babec 2022-02-25 15:41:04 +01:00
parent 1e3f8e8302
commit 7b7c8aa2aa
No known key found for this signature in database
GPG Key ID: 13E577E3769B2079
16 changed files with 39 additions and 32 deletions

View File

@ -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(());
} }
} }

View File

@ -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 {

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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],