multiple chat clients + handle showing long discussion to new client

This commit is contained in:
Arkitu 2025-05-04 13:37:31 +02:00
parent f523ec812c
commit 4521697f48
3 changed files with 37 additions and 16 deletions

View File

@ -149,9 +149,6 @@ impl App for ChatApp {
if msg_id > msgs.next {
return (HttpResCode::BadRequest, "", &[]);
}
if msg_id < msgs.next.saturating_sub(MEMORY_SIZE as u16 + 1) {
return (HttpResCode::NoContent, "", &[]);
}
self.res_buf.clear();
unwrap(write!(&mut self.res_buf, "<div class=\"message\"")).await;
if msg_id == msgs.next {
@ -171,7 +168,6 @@ impl App for ChatApp {
.await;
} else {
if let Some(n) = load {
info!("test2");
unwrap(write!(
&mut self.res_buf,
" hx-get=\"/chat/message/{}?load={}\" \
@ -183,17 +179,37 @@ impl App for ChatApp {
))
.await;
}
info!("test3");
let msg = match msgs.get_abs(msg_id) {
Some(msg) => msg,
None => return (HttpResCode::NoContent, "", &[]),
};
match msgs.get_abs(msg_id) {
Some(msg) => {
unwrap(write!(
&mut self.res_buf,
"><b>{}</b>: {}</div>",
msg.author, msg.content
))
.await
}
None => {
if load.is_some() {
if (msg_id as isize)
== (msgs.next as isize - MEMORY_SIZE as isize - 1)
{
unwrap(write!(
&mut self.res_buf,
"><em>Older messages forgotten</em></div>"
))
.await;
} else {
unwrap(write!(
&mut self.res_buf,
" style=\"display: none;\"></div>"
))
.await;
}
} else {
return (HttpResCode::NoContent, "", &[]);
}
}
};
};
return (HttpResCode::Ok, "html", &self.res_buf);
@ -222,6 +238,9 @@ impl Messages {
}
}
fn get_abs(&self, id: u16) -> Option<&Message> {
if (id as isize) < (self.next as isize - MEMORY_SIZE as isize) {
return None;
}
self.inner.get_signed((id as isize) - (self.next as isize))
}
fn push(&mut self, msg: Message) {

View File

@ -172,7 +172,9 @@ async fn main(spawner: Spawner) {
unwrap(spawner.spawn(socket::index_listen_task(stack, 80))).await;
unwrap(spawner.spawn(socket::ttt_listen_task(stack, apps::ttt::Team::Zero, 8080))).await;
unwrap(spawner.spawn(socket::ttt_listen_task(stack, apps::ttt::Team::One, 8081))).await;
for _ in 0..2 {
unwrap(spawner.spawn(socket::chat_listen_task(stack, 8082))).await;
}
}
#[cfg(feature = "wifi-connect")]

View File

@ -18,7 +18,7 @@ pub async fn index_listen_task(stack: embassy_net::Stack<'static>, port: u16) {
listen_task(stack, IndexApp, port).await
}
#[embassy_executor::task(pool_size = 1)]
#[embassy_executor::task(pool_size = 2)]
pub async fn chat_listen_task(stack: embassy_net::Stack<'static>, port: u16) {
listen_task(stack, chat::ChatApp::new(), port).await
}