mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
3e0ca7d6d4
individual commits combined here: send active plugins compute plugin sha hash single position for defining Hash type request plugins from the server Server sending the plugin to the client store received plugin in file and use it handle plugin data at the right place pass config_dir to client init load local plugins operational plugin caching simplify the interface clippy suggestions remove artifacts fix compilation of test world ChangeLog entry code quality fixes improve readability adapt to multiple systems
137 lines
3.5 KiB
Rust
137 lines
3.5 KiB
Rust
#![deny(unsafe_code)]
|
|
#![deny(clippy::clone_on_ref_ptr)]
|
|
|
|
use client_i18n::LocalizationHandle;
|
|
use common::{clock::Clock, comp};
|
|
use std::{
|
|
io,
|
|
sync::{mpsc, Arc},
|
|
thread,
|
|
time::Duration,
|
|
};
|
|
use tokio::runtime::Runtime;
|
|
use tracing::{error, info};
|
|
use veloren_client::{addr::ConnectionArgs, Client, Event};
|
|
use voxygen_i18n_helpers::localize_chat_message;
|
|
|
|
const TPS: u64 = 10; // Low value is okay, just reading messages.
|
|
|
|
fn read_input() -> String {
|
|
let mut buffer = String::new();
|
|
|
|
io::stdin()
|
|
.read_line(&mut buffer)
|
|
.expect("Failed to read input");
|
|
|
|
buffer.trim().to_string()
|
|
}
|
|
|
|
fn main() {
|
|
// Initialize logging.
|
|
common_frontend::init_stdout(None);
|
|
|
|
info!("loading localisation");
|
|
|
|
let localisation = LocalizationHandle::load_expect("en");
|
|
|
|
info!("Starting chat-cli...");
|
|
|
|
// Set up an fps clock.
|
|
let mut clock = Clock::new(Duration::from_secs_f64(1.0 / TPS as f64));
|
|
|
|
println!("Enter your username");
|
|
let username = read_input();
|
|
|
|
println!("Enter the server address");
|
|
let server_addr = read_input();
|
|
|
|
println!("Enter your password");
|
|
let password = read_input();
|
|
|
|
let runtime = Arc::new(Runtime::new().unwrap());
|
|
let runtime2 = Arc::clone(&runtime);
|
|
let addr = ConnectionArgs::Tcp {
|
|
prefer_ipv6: false,
|
|
hostname: server_addr,
|
|
};
|
|
|
|
// Create a client.
|
|
let mut client = runtime
|
|
.block_on(Client::new(
|
|
addr,
|
|
runtime2,
|
|
&mut None,
|
|
&username,
|
|
&password,
|
|
None,
|
|
|provider| provider == "https://auth.veloren.net",
|
|
&|_| {},
|
|
|_| {},
|
|
Default::default(),
|
|
))
|
|
.expect("Failed to create client instance");
|
|
|
|
println!("Server info: {:?}", client.server_info());
|
|
|
|
let mut player_printed = false;
|
|
|
|
let (tx, rx) = mpsc::channel();
|
|
thread::spawn(move || {
|
|
loop {
|
|
let msg = read_input();
|
|
tx.send(msg).unwrap();
|
|
}
|
|
});
|
|
|
|
loop {
|
|
for msg in rx.try_iter() {
|
|
client.send_chat(msg)
|
|
}
|
|
|
|
let events = match client.tick(comp::ControllerInputs::default(), clock.dt()) {
|
|
Ok(events) => events,
|
|
Err(err) => {
|
|
error!("Error: {:?}", err);
|
|
break;
|
|
},
|
|
};
|
|
|
|
const SHOW_NAME: bool = false;
|
|
for event in events {
|
|
match event {
|
|
Event::Chat(m) => println!(
|
|
"{}",
|
|
localize_chat_message(
|
|
m,
|
|
|msg| client.lookup_msg_context(msg),
|
|
&localisation.read(),
|
|
SHOW_NAME,
|
|
)
|
|
.1
|
|
),
|
|
Event::Disconnect => {}, // TODO
|
|
Event::DisconnectionNotification(time) => {
|
|
let message = match time {
|
|
0 => String::from("Goodbye!"),
|
|
_ => format!("Connection lost. Kicking in {} seconds", time),
|
|
};
|
|
|
|
println!("{}", message)
|
|
},
|
|
_ => {},
|
|
}
|
|
}
|
|
|
|
// Clean up the server after a tick.
|
|
client.cleanup();
|
|
|
|
// Wait for the next tick.
|
|
clock.tick();
|
|
|
|
if !player_printed {
|
|
println!("Players online: {:?}", client.players().collect::<Vec<_>>());
|
|
player_printed = true;
|
|
}
|
|
}
|
|
}
|