mirror of
https://github.com/MeexReay/bRAC.git
synced 2025-05-06 13:38:04 +03:00
move protocol out of gui
This commit is contained in:
parent
588e536077
commit
bda976bd1b
@ -1,7 +1,6 @@
|
|||||||
use std::sync::{Arc, mpsc::{channel, Receiver}};
|
use std::sync::{Arc, mpsc::{channel, Receiver}};
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::time::{Duration, SystemTime};
|
use std::time::{Duration, SystemTime};
|
||||||
use std::error::Error;
|
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
|
||||||
use chrono::Local;
|
use chrono::Local;
|
||||||
@ -17,9 +16,8 @@ use gtk4::{
|
|||||||
Overlay, Picture, ScrolledWindow, Settings, Window
|
Overlay, Picture, ScrolledWindow, Settings, Window
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{connect_rac, proto::{connect, read_messages}};
|
use super::{config::{default_max_messages, default_update_time, get_config_path, save_config, Config},
|
||||||
|
ctx::Context, on_send_message, parse_message, print_message, recv_tick};
|
||||||
use super::{config::{default_max_messages, default_update_time, get_config_path, save_config, Config}, ctx::Context, on_send_message, parse_message};
|
|
||||||
|
|
||||||
struct UiModel {
|
struct UiModel {
|
||||||
chat_box: GtkBox,
|
chat_box: GtkBox,
|
||||||
@ -34,44 +32,6 @@ pub fn add_chat_message(ctx: Arc<Context>, message: String) {
|
|||||||
let _ = ctx.sender.read().unwrap().clone().unwrap().send(message);
|
let _ = ctx.sender.read().unwrap().clone().unwrap().send(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_message(ctx: Arc<Context>, message: String) -> Result<(), Box<dyn Error>> {
|
|
||||||
ctx.add_message(ctx.config(|o| o.max_messages), vec![message.clone()]);
|
|
||||||
add_chat_message(ctx.clone(), message);
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn recv_tick(ctx: Arc<Context>) -> Result<(), Box<dyn Error>> {
|
|
||||||
match read_messages(
|
|
||||||
connect_rac!(ctx),
|
|
||||||
ctx.config(|o| o.max_messages),
|
|
||||||
ctx.packet_size(),
|
|
||||||
!ctx.config(|o| o.ssl_enabled),
|
|
||||||
ctx.config(|o| o.chunked_enabled)
|
|
||||||
) {
|
|
||||||
Ok(Some((messages, size))) => {
|
|
||||||
if ctx.config(|o| o.chunked_enabled) {
|
|
||||||
ctx.add_messages_packet(ctx.config(|o| o.max_messages), messages.clone(), size);
|
|
||||||
for msg in messages {
|
|
||||||
add_chat_message(ctx.clone(), msg.clone());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ctx.put_messages_packet(ctx.config(|o| o.max_messages), messages.clone(), size);
|
|
||||||
for msg in messages {
|
|
||||||
add_chat_message(ctx.clone(), msg.clone());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Err(e) => {
|
|
||||||
let msg = format!("Read messages error: {}", e.to_string()).to_string();
|
|
||||||
ctx.add_message(ctx.config(|o| o.max_messages), vec![msg.clone()]);
|
|
||||||
add_chat_message(ctx.clone(), msg.clone());
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
thread::sleep(Duration::from_millis(ctx.config(|o| o.update_time) as u64));
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn load_pixbuf(data: &[u8]) -> Pixbuf {
|
fn load_pixbuf(data: &[u8]) -> Pixbuf {
|
||||||
let loader = PixbufLoader::new();
|
let loader = PixbufLoader::new();
|
||||||
loader.write(data).unwrap();
|
loader.write(data).unwrap();
|
||||||
@ -615,23 +575,23 @@ fn build_ui(ctx: Arc<Context>, app: &Application) -> UiModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(ctx: Arc<Context>, ui: UiModel) {
|
fn run_recv_loop(ctx: Arc<Context>) {
|
||||||
let (sender, receiver) = channel();
|
thread::spawn(move || {
|
||||||
|
|
||||||
*ctx.sender.write().unwrap() = Some(Arc::new(sender));
|
|
||||||
|
|
||||||
thread::spawn({
|
|
||||||
let ctx = ctx.clone();
|
|
||||||
|
|
||||||
move || {
|
|
||||||
loop {
|
loop {
|
||||||
if let Err(e) = recv_tick(ctx.clone()) {
|
if let Err(e) = recv_tick(ctx.clone()) {
|
||||||
let _ = print_message(ctx.clone(), format!("Print messages error: {}", e.to_string()).to_string());
|
let _ = print_message(ctx.clone(), format!("Print messages error: {}", e.to_string()).to_string());
|
||||||
thread::sleep(Duration::from_secs(1));
|
thread::sleep(Duration::from_secs(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn setup(ctx: Arc<Context>, ui: UiModel) {
|
||||||
|
let (sender, receiver) = channel();
|
||||||
|
|
||||||
|
*ctx.sender.write().unwrap() = Some(Arc::new(sender));
|
||||||
|
|
||||||
|
run_recv_loop(ctx.clone());
|
||||||
|
|
||||||
let (tx, rx) = channel();
|
let (tx, rx) = channel();
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
use std::{
|
use std::{
|
||||||
error::Error,
|
error::Error, sync::Arc, thread, time::{Duration, SystemTime, UNIX_EPOCH}
|
||||||
sync::Arc,
|
|
||||||
time::{SystemTime, UNIX_EPOCH}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{connect_rac, proto::{register_user, send_message_auth}};
|
use crate::{connect_rac, proto::{register_user, send_message_auth}};
|
||||||
@ -11,15 +9,13 @@ use super::{
|
|||||||
util::sanitize_text
|
util::sanitize_text
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use gui::add_chat_message;
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
use ctx::Context;
|
use ctx::Context;
|
||||||
|
|
||||||
pub use gui::{
|
pub use gui::run_main_loop;
|
||||||
print_message,
|
|
||||||
run_main_loop
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
@ -163,6 +159,44 @@ pub fn prepare_message(ctx: Arc<Context>, message: &str) -> String {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn print_message(ctx: Arc<Context>, message: String) -> Result<(), Box<dyn Error>> {
|
||||||
|
ctx.add_message(ctx.config(|o| o.max_messages), vec![message.clone()]);
|
||||||
|
add_chat_message(ctx.clone(), message);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn recv_tick(ctx: Arc<Context>) -> Result<(), Box<dyn Error>> {
|
||||||
|
match read_messages(
|
||||||
|
connect_rac!(ctx),
|
||||||
|
ctx.config(|o| o.max_messages),
|
||||||
|
ctx.packet_size(),
|
||||||
|
!ctx.config(|o| o.ssl_enabled),
|
||||||
|
ctx.config(|o| o.chunked_enabled)
|
||||||
|
) {
|
||||||
|
Ok(Some((messages, size))) => {
|
||||||
|
if ctx.config(|o| o.chunked_enabled) {
|
||||||
|
ctx.add_messages_packet(ctx.config(|o| o.max_messages), messages.clone(), size);
|
||||||
|
for msg in messages {
|
||||||
|
add_chat_message(ctx.clone(), msg.clone());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ctx.put_messages_packet(ctx.config(|o| o.max_messages), messages.clone(), size);
|
||||||
|
for msg in messages {
|
||||||
|
add_chat_message(ctx.clone(), msg.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(e) => {
|
||||||
|
let msg = format!("Read messages error: {}", e.to_string()).to_string();
|
||||||
|
ctx.add_message(ctx.config(|o| o.max_messages), vec![msg.clone()]);
|
||||||
|
add_chat_message(ctx.clone(), msg.clone());
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
thread::sleep(Duration::from_millis(ctx.config(|o| o.update_time) as u64));
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn on_send_message(ctx: Arc<Context>, message: &str) -> Result<(), Box<dyn Error>> {
|
pub fn on_send_message(ctx: Arc<Context>, message: &str) -> Result<(), Box<dyn Error>> {
|
||||||
if message.starts_with("/") && ctx.config(|o| o.commands_enabled) {
|
if message.starts_with("/") && ctx.config(|o| o.commands_enabled) {
|
||||||
on_command(ctx.clone(), &message)?;
|
on_command(ctx.clone(), &message)?;
|
||||||
|
Loading…
Reference in New Issue
Block a user