s'more chat progress

This commit is contained in:
Rusty Striker 2024-10-01 22:16:35 +03:00
parent acf96db186
commit b4e6a3fe39
Signed by: RustyStriker
GPG key ID: 87E4D691632DFF15
5 changed files with 33 additions and 4 deletions

View file

@ -21,6 +21,20 @@
return false; return false;
} }
} }
document.getElementById('login-username').onkeypress = (e) => {
if(e.key == 'Enter') {
document.getElementById('login-pass').focus();
return false;
}
}
document.getElementById('login-pass').onkeypress = (e) => {
if(e.key == 'Enter') {
onLoginClick();
return false;
}
}
// focus on the username field for the sake of just pressing enter multiple times
document.getElementById('login-username').focus();
} }
tavern.onlogin = (s) => { tavern.onlogin = (s) => {
@ -29,8 +43,8 @@
let game = document.getElementById('game'); let game = document.getElementById('game');
login.style.display = 'none'; login.style.display = 'none';
game.style.display = 'flex'; game.style.display = 'flex';
// get all chat history as soon as we get in // get last 50 msgs (i think that is enough for now) when we get in
tavern.get_chat_history(0, 0); tavern.get_last_msgs(50);
} }
else { else {
alert("Invalid username or password!"); alert("Invalid username or password!");
@ -55,6 +69,7 @@
history.removeChild(exists); history.removeChild(exists);
} }
history.appendChild(msg); history.appendChild(msg);
msg.scrollIntoView();
} }
function onLoginClick() { function onLoginClick() {
let username = document.getElementById('login-username').value; let username = document.getElementById('login-username').value;

View file

@ -38,3 +38,7 @@ tavern.get_chat_history = (from, amount) => {
if(!tavern.connected || tavern.loggedIn) { return false; } if(!tavern.connected || tavern.loggedIn) { return false; }
tavern.socket.send(JSON.stringify({ get_chat_history: { from: from, amount: amount } })) tavern.socket.send(JSON.stringify({ get_chat_history: { from: from, amount: amount } }))
} }
tavern.get_last_msgs = (amount) => {
if(!tavern.connected || tavern.loggedIn) { return false; }
tavern.socket.send(JSON.stringify({ get_last_messages: { amount: amount } }))
}

View file

@ -14,6 +14,7 @@ pub enum Request {
Login(login::LoginRequest), Login(login::LoginRequest),
Message(ChatMessage), Message(ChatMessage),
GetChatHistory { amount: usize, from: usize }, GetChatHistory { amount: usize, from: usize },
GetLastMessages { amount: usize, },
Quit, Quit,
Shutdown Shutdown
} }

View file

@ -57,6 +57,15 @@ impl GameServer {
.collect(); .collect();
_ = broadcast.send(api::Response::GetChatHistory(history)); _ = broadcast.send(api::Response::GetChatHistory(history));
}, },
api::Request::GetLastMessages { mut amount } => {
if amount == 0 { amount = self.chat.len(); }
let start = if amount >= self.chat.len() { self.chat.len() } else { self.chat.len() - amount };
let history: Vec<ChatMessage> = self.chat.iter()
.skip(start)
.map(|m| m.1.clone())
.collect();
_ = broadcast.send(api::Response::GetChatHistory(history));
},
} }
} }
_ = broadcast.send(api::Response::Shutdown); _ = broadcast.send(api::Response::Shutdown);

View file

@ -70,11 +70,11 @@ async fn handle_socket(mut socket: ws::WebSocket, msend: mpsc::Sender<(String, R
println!("Got unauthorized message: {:?}", t); println!("Got unauthorized message: {:?}", t);
match req { match req {
// TODO: Actual signing in mechanism with multiple ids :) // TODO: Actual signing in mechanism with multiple ids :)
Request::Login(r) => if r.username == "rusty" { Request::Login(r) => if r.username == "rusty" || r.username == "honey" {
_ = socket.send(Message::Text( _ = socket.send(Message::Text(
serde_json::to_string(&Response::Login(open_tavern::api::login::LoginResult { success: true })).unwrap() serde_json::to_string(&Response::Login(open_tavern::api::login::LoginResult { success: true })).unwrap()
)).await; )).await;
id = Some(String::from("rusty")); id = Some(String::from(r.username));
break; break;
} }
else { else {