„main.rs“ hinzufügen
This commit is contained in:
123
main.rs
Normal file
123
main.rs
Normal file
@@ -0,0 +1,123 @@
|
||||
use std::fmt::Debug;
|
||||
use std::str::from_utf8;
|
||||
use std::sync::Mutex;
|
||||
use std::thread;
|
||||
use std::time::Duration;
|
||||
|
||||
use actix_web::{App, get, HttpServer, web::Data};
|
||||
use rumqttc::{Client, Event, Incoming, MqttOptions, QoS};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use todolist::services;
|
||||
|
||||
mod todolist;
|
||||
|
||||
struct AppState {
|
||||
todolist_entries: Mutex<Vec<TodolistEntry>>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||
struct TodolistEntry {
|
||||
id: i32,
|
||||
date: i64,
|
||||
title: String,
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
async fn index() -> String {
|
||||
"This is a health check".to_string()
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
let state = AppState {
|
||||
todolist_entries: Mutex::new(Vec::new()),
|
||||
};
|
||||
|
||||
let app_data = Data::new(state);
|
||||
|
||||
let state_arc = app_data.clone().into_inner();
|
||||
let state_arc_cloned = state_arc.clone();
|
||||
|
||||
thread::spawn(move || {
|
||||
loop {
|
||||
{
|
||||
let todolist = match state_arc_cloned.todolist_entries.lock() {
|
||||
Ok(guard) => guard,
|
||||
Err(poisoned) => poisoned.into_inner(),
|
||||
};
|
||||
println!("Data: {:?}", todolist.to_vec());
|
||||
}
|
||||
thread::sleep(Duration::from_millis(1000));
|
||||
}
|
||||
});
|
||||
|
||||
let mut mqttoptions = MqttOptions::new("rumqtt-sync", "test.mosquitto.org", 1883);
|
||||
mqttoptions.set_keep_alive(Duration::from_secs(5));
|
||||
|
||||
let (mut client, mut connection) = Client::new(mqttoptions, 10);
|
||||
|
||||
let result = client.subscribe("hello/rumqtt", QoS::AtLeastOnce);
|
||||
match result {
|
||||
Ok(val) => {
|
||||
println!("Subscribed. {:?}", val)
|
||||
}
|
||||
Err(e) => {
|
||||
println!("Error subscribing. {:?}", e)
|
||||
}
|
||||
}
|
||||
|
||||
// let result = client.subscribe("zigbee2mqtt/#", QoS::AtLeastOnce);
|
||||
// match result {
|
||||
// Ok(val) => {
|
||||
// println!("Subscribed. {:?}", val)
|
||||
// }
|
||||
// Err(e) => {
|
||||
// println!("Error subscribing. {:?}", e)
|
||||
// }
|
||||
// }
|
||||
|
||||
thread::spawn(move || {
|
||||
for i in 0..10 {
|
||||
client.publish("hello/rumqtt", QoS::AtLeastOnce, false, vec![i; i as usize]).unwrap();
|
||||
thread::sleep(Duration::from_millis(100));
|
||||
}
|
||||
});
|
||||
|
||||
thread::spawn(move || {
|
||||
for (_i, notification) in connection.iter().enumerate() {
|
||||
match notification {
|
||||
Ok(event) => {
|
||||
match event {
|
||||
Event::Incoming(Incoming::Publish(publish)) => {
|
||||
let payload = from_utf8(&publish.payload).unwrap_or("");
|
||||
println!("Topic: {:?}, Qos: {:?}, Retain: {}, Pkid: {:?}, Payload: {:?}",
|
||||
publish.topic,
|
||||
publish.qos,
|
||||
publish.retain,
|
||||
publish.pkid,
|
||||
payload,
|
||||
);
|
||||
}
|
||||
Event::Incoming(e) => {
|
||||
println!("{:?}", e)
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
println!("ENDE");
|
||||
});
|
||||
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
.app_data(app_data.clone())
|
||||
.service(index)
|
||||
.configure(services::config)
|
||||
})
|
||||
.bind(("127.0.0.1", 8080))?
|
||||
.run()
|
||||
.await
|
||||
}
|
||||
Reference in New Issue
Block a user