Fix display issues
This commit is contained in:
parent
11e3c7d48e
commit
fdb701dbf1
@ -7,7 +7,7 @@ use std::os::unix::net::UnixStream;
|
|||||||
use std::sync::mpsc::{channel, Receiver, Sender};
|
use std::sync::mpsc::{channel, Receiver, Sender};
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time;
|
use std::time;
|
||||||
use termion::event::Key;
|
use termion::event::{parse_event, Event, Key};
|
||||||
|
|
||||||
use std::io::{stdin, stdout, Read, Write};
|
use std::io::{stdin, stdout, Read, Write};
|
||||||
use termion::raw::{IntoRawMode, RawTerminal};
|
use termion::raw::{IntoRawMode, RawTerminal};
|
||||||
@ -64,6 +64,7 @@ fn main() {
|
|||||||
let login_result = login(&mut client, &mut stream);
|
let login_result = login(&mut client, &mut stream);
|
||||||
if login_result == LoginResult::UserExited {
|
if login_result == LoginResult::UserExited {
|
||||||
send_request(&client, &mut stream, ClientRequest::Exit);
|
send_request(&client, &mut stream, ClientRequest::Exit);
|
||||||
|
client.display_sender.send(DisplayMessage::Exit).unwrap();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if client.player.role == UserRole::Black {
|
if client.player.role == UserRole::Black {
|
||||||
@ -148,7 +149,7 @@ fn main() {
|
|||||||
}
|
}
|
||||||
client.display_sender.send(DisplayMessage::Clear).unwrap();
|
client.display_sender.send(DisplayMessage::Clear).unwrap();
|
||||||
let end_message = match current_position.outcome() {
|
let end_message = match current_position.outcome() {
|
||||||
None => "Bye",
|
None => "",
|
||||||
Some(Outcome::Draw) => "Draw game.",
|
Some(Outcome::Draw) => "Draw game.",
|
||||||
Some(Outcome::Decisive { winner }) => {
|
Some(Outcome::Decisive { winner }) => {
|
||||||
if winner == Color::White {
|
if winner == Color::White {
|
||||||
@ -159,24 +160,14 @@ fn main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.to_string();
|
.to_string();
|
||||||
|
if !end_message.is_empty() {
|
||||||
client
|
client
|
||||||
.display_sender
|
.display_sender
|
||||||
.send(DisplayMessage::Message(end_message))
|
.send(DisplayMessage::Message(end_message))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
thread::sleep(time::Duration::from_secs(1));
|
thread::sleep(time::Duration::from_secs(1));
|
||||||
client
|
}
|
||||||
.display_sender
|
|
||||||
.send(DisplayMessage::Debug(
|
|
||||||
"sending request to server to exit...".to_string(),
|
|
||||||
))
|
|
||||||
.unwrap();
|
|
||||||
send_request(&client, &mut stream, ClientRequest::Exit);
|
send_request(&client, &mut stream, ClientRequest::Exit);
|
||||||
client
|
|
||||||
.display_sender
|
|
||||||
.send(DisplayMessage::Debug(
|
|
||||||
"request to server to exit sent.".to_string(),
|
|
||||||
))
|
|
||||||
.unwrap();
|
|
||||||
client.display_sender.send(DisplayMessage::Exit).unwrap();
|
client.display_sender.send(DisplayMessage::Exit).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,6 +229,7 @@ pub enum DisplayMessage {
|
|||||||
Information(String),
|
Information(String),
|
||||||
Debug(String),
|
Debug(String),
|
||||||
Input(Key),
|
Input(Key),
|
||||||
|
RemoveLastInput,
|
||||||
Enter,
|
Enter,
|
||||||
Clear,
|
Clear,
|
||||||
Exit,
|
Exit,
|
||||||
@ -291,6 +283,7 @@ fn start_display_thread(request_recv: Receiver<DisplayMessage>) {
|
|||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
DisplayMessage::Input(k) => display_key(&mut stdout, k),
|
DisplayMessage::Input(k) => display_key(&mut stdout, k),
|
||||||
|
DisplayMessage::RemoveLastInput => write!(stdout, "{}{}", termion::cursor::Left(1), termion::clear::AfterCursor).unwrap(),
|
||||||
DisplayMessage::Debug(s) => write!(
|
DisplayMessage::Debug(s) => write!(
|
||||||
stdout,
|
stdout,
|
||||||
"{}{}{}{}{}",
|
"{}{}{}{}{}",
|
||||||
@ -322,15 +315,16 @@ fn start_keyboard_input_thread(
|
|||||||
let mut bytes = stdin.bytes();
|
let mut bytes = stdin.bytes();
|
||||||
loop {
|
loop {
|
||||||
let b = bytes.next().unwrap().unwrap();
|
let b = bytes.next().unwrap().unwrap();
|
||||||
match b {
|
let e = parse_event(b, &mut bytes).unwrap();
|
||||||
b'q' => {
|
match e {
|
||||||
|
Event::Key(Key::Ctrl('c')) => {
|
||||||
sender.send(String::from(EXIT_MSG)).unwrap();
|
sender.send(String::from(EXIT_MSG)).unwrap();
|
||||||
waiting_server_msg_sender
|
waiting_server_msg_sender
|
||||||
.send(WaitingServerMsg::UserCanceled)
|
.send(WaitingServerMsg::UserCanceled)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
break;
|
break;
|
||||||
}
|
},
|
||||||
b'\r' => {
|
Event::Key(Key::Char('\n')) => {
|
||||||
display_sender.send(DisplayMessage::Enter).unwrap();
|
display_sender.send(DisplayMessage::Enter).unwrap();
|
||||||
sender.send(buffer.clone()).unwrap();
|
sender.send(buffer.clone()).unwrap();
|
||||||
if buffer == EXIT_MSG {
|
if buffer == EXIT_MSG {
|
||||||
@ -339,15 +333,23 @@ fn start_keyboard_input_thread(
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
buffer.clear();
|
buffer.clear();
|
||||||
}
|
},
|
||||||
b => {
|
Event::Key(Key::Char(c)) => {
|
||||||
let c = b as char;
|
|
||||||
buffer.push_str(&c.to_string());
|
buffer.push_str(&c.to_string());
|
||||||
display_sender
|
display_sender
|
||||||
.send(DisplayMessage::Input(Key::Char(c)))
|
.send(DisplayMessage::Input(Key::Char(c)))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
},
|
||||||
}
|
Event::Key(Key::Backspace) => {
|
||||||
|
buffer.pop();
|
||||||
|
display_sender
|
||||||
|
.send(DisplayMessage::RemoveLastInput)
|
||||||
|
.unwrap();
|
||||||
|
},
|
||||||
|
Event::Key(k) => display_sender.send(DisplayMessage::Debug(format!("unknown key {:?}", k))).unwrap(),
|
||||||
|
Event::Mouse(_) => continue,
|
||||||
|
Event::Unsupported(_) => continue
|
||||||
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
receiver
|
receiver
|
||||||
@ -466,6 +468,7 @@ fn prompt_user_for_role(client: &Client, stream: &mut UnixStream) -> PromptedRol
|
|||||||
let mut input = client.keyboard_input_recv.recv().unwrap();
|
let mut input = client.keyboard_input_recv.recv().unwrap();
|
||||||
input = String::from(input.trim());
|
input = String::from(input.trim());
|
||||||
if input == EXIT_MSG {
|
if input == EXIT_MSG {
|
||||||
|
client.waiting_server_msg_receiver.recv().unwrap();
|
||||||
return PromptedRoleResponse::Exit;
|
return PromptedRoleResponse::Exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user