Refactor more stuff

This commit is contained in:
Tobias Reisinger 2023-12-04 23:59:26 +01:00
parent 5a7b2de0ea
commit 9394a1ae52
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
15 changed files with 167 additions and 86 deletions
emgauwa-controller/src

View file

@ -42,7 +42,7 @@ async fn create_this_relay(
let relay = DbRelay::create(
conn,
&settings_relay.name,
settings_relay.number.unwrap(),
settings_relay.number.expect("Relay number is missing"),
this_controller,
)
.await?;
@ -55,6 +55,34 @@ async fn create_this_relay(
Ok(relay)
}
async fn run_websocket(this: Controller, url: &str) {
match connect_async(url).await {
Ok(connection) => {
let (ws_stream, _) = connection;
let (mut write, read) = ws_stream.split();
let ws_action = ControllerWsAction::Register(this.clone());
let ws_action_json =
serde_json::to_string(&ws_action).expect("Failed to serialize action");
if let Err(err) = write.send(Message::text(ws_action_json)).await {
log::error!("Failed to register at websocket: {}", err);
return;
}
let read_handler = read.for_each(handle_message);
read_handler.await;
log::warn!("Lost connection to websocket");
}
Err(err) => {
log::warn!("Failed to connect to websocket: {}", err,);
}
}
}
#[tokio::main]
async fn main() {
let settings = settings::init();
@ -67,19 +95,24 @@ async fn main() {
.await
.expect("Failed to get database connection");
let db_controller = DbController::get_all(&mut conn)
let db_controller = match DbController::get_all(&mut conn)
.await
.expect("Failed to get controller from database")
.pop()
.unwrap_or_else(|| {
futures::executor::block_on(create_this_controller(&mut conn, &settings))
});
{
None => futures::executor::block_on(create_this_controller(&mut conn, &settings)),
Some(c) => c,
};
for relay in &settings.relays {
if DbRelay::get_by_controller_and_num(&mut conn, &db_controller, relay.number.unwrap())
.await
.expect("Failed to get relay from database")
.is_none()
if DbRelay::get_by_controller_and_num(
&mut conn,
&db_controller,
relay.number.expect("Relay number is missing"),
)
.await
.expect("Failed to get relay from database")
.is_none()
{
create_this_relay(&mut conn, &db_controller, relay)
.await
@ -90,7 +123,7 @@ async fn main() {
let db_controller = db_controller
.update(&mut conn, &db_controller.name, settings.relays.len() as i64)
.await
.unwrap();
.expect("Failed to update controller");
let this = Controller::from_db_model(&mut conn, db_controller)
.expect("Failed to convert database models");
@ -103,27 +136,7 @@ async fn main() {
tokio::spawn(run_relay_loop(settings));
loop {
match connect_async(&url).await {
Ok(connection) => {
let (ws_stream, _) = connection;
let (mut write, read) = ws_stream.split();
let ws_action = ControllerWsAction::Register(this.clone());
let ws_action_json = serde_json::to_string(&ws_action).unwrap();
write.send(Message::text(ws_action_json)).await.unwrap();
let read_handler = read.for_each(handle_message);
read_handler.await;
log::warn!("Lost connection to websocket");
}
Err(err) => {
log::warn!("Failed to connect to websocket: {}", err,);
}
}
run_websocket(this.clone(), &url).await;
log::info!(
"Retrying to connect in {} seconds...",