This commit is contained in:
2023-08-12 14:27:56 +02:00
parent 90424ffbc0
commit 3bb476190c

View File

@@ -17,7 +17,9 @@ use std::collections::HashMap;
use std::convert::Infallible; use std::convert::Infallible;
use std::net::SocketAddr; use std::net::SocketAddr;
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::{Arc, RwLock}; use std::sync::Arc;
use tokio::sync::RwLock;
use smallvec::SmallVec; use smallvec::SmallVec;
use teloxide::adaptors::throttle::Limits; use teloxide::adaptors::throttle::Limits;
@@ -160,7 +162,7 @@ impl BotsManager {
let (stop_token, _stop_flag, tx, listener) = self.get_listener(); let (stop_token, _stop_flag, tx, listener) = self.get_listener();
{ {
let mut routers = self.state.routers.write().unwrap(); let mut routers = self.state.routers.write().await;
routers.insert(token.to_string(), (stop_token, ClosableSender::new(tx))); routers.insert(token.to_string(), (stop_token, ClosableSender::new(tx)));
} }
@@ -192,7 +194,7 @@ impl BotsManager {
Ok(v) => { Ok(v) => {
for bot_data in v.iter() { for bot_data in v.iter() {
let need_start = { let need_start = {
let routers = self.state.routers.read().unwrap(); let routers = self.state.routers.read().await;
!routers.contains_key(&bot_data.token) !routers.contains_key(&bot_data.token)
}; };
@@ -214,7 +216,7 @@ impl BotsManager {
input: String, input: String,
) -> impl IntoResponse { ) -> impl IntoResponse {
let routes = routers.read().unwrap(); let routes = routers.read().await;
let tx = routes.get(&token); let tx = routes.get(&token);
let (stop_token, r_tx) = match tx { let (stop_token, r_tx) = match tx {
@@ -226,7 +228,7 @@ impl BotsManager {
Some(v) => v, Some(v) => v,
None => { None => {
stop_token.stop(); stop_token.stop();
routers.write().unwrap().remove(&token); routers.write().await.remove(&token);
return StatusCode::SERVICE_UNAVAILABLE; return StatusCode::SERVICE_UNAVAILABLE;
}, },
}; };
@@ -240,7 +242,7 @@ impl BotsManager {
if let Err(err) = tx.send(Ok(update)) { if let Err(err) = tx.send(Ok(update)) {
log::error!("{:?}", err); log::error!("{:?}", err);
stop_token.stop(); stop_token.stop();
routers.write().unwrap().remove(&token); routers.write().await.remove(&token);
return StatusCode::SERVICE_UNAVAILABLE; return StatusCode::SERVICE_UNAVAILABLE;
} }
} }
@@ -280,7 +282,7 @@ impl BotsManager {
} }
pub async fn stop_all(self) { pub async fn stop_all(self) {
let routers = self.state.routers.read().unwrap(); let routers = self.state.routers.read().await;
for (stop_token, _) in routers.values() { for (stop_token, _) in routers.values() {
stop_token.stop(); stop_token.stop();