use eztrans_rs::EzTransEngine;
use std::{env, error::Error};
use windows_shared_memory::{Client, ReceiveMessage, Server};
#[test]
fn test_shared_memory_translation() -> Result<(), Box<dyn Error>> {
let server = Server::new(None).unwrap();
let data = "こんにちは。".as_bytes();
let manifest_dir = env!("CARGO_MANIFEST_DIR");
let default_dll_path = format!("{}/../eztrans_dll/J2KEngine.dll", manifest_dir);
let default_dat_path = format!("{}/../eztrans_dll/Dat", manifest_dir);
let args: Vec<String> = env::args().collect();
let mut folder_path: Option<&str> = None;
for arg in args.iter().skip(1) {
if arg.starts_with("--folder_path=") {
folder_path = Some(arg.trim_start_matches("--folder_path=").trim_matches('"'));
}
}
let (dll_path, dat_path) = if let Some(path) = folder_path {
(format!("{}/J2KEngine.dll", path), format!("{}/Dat", path))
} else {
(default_dll_path, default_dat_path)
};
let ez_trans = EzTransEngine::new(&dll_path)?;
ez_trans.initialize_ex("CSUSER123455", &dat_path)?;
let client = Client::new(None)?;
server.send(&data)?;
loop {
let receive_server = client.receive(Some(u32::MAX));
if let ReceiveMessage::Message(recv_message) = receive_server {
match ez_trans.default_translate(&recv_message) {
Ok(translated) => {
client.send(&translated.as_bytes())?;
}
Err(error) => {
client.send(&format!("Translation error: {}", &error).as_bytes())?;
}
}
break;
} else if let ReceiveMessage::Exit = receive_server {
break;
} else if let ReceiveMessage::MessageError(e) = receive_server {
eprintln!("Error: {}", e);
break;
} else if let ReceiveMessage::Timeout = receive_server {
println!("Timeout");
}
}
let receive_client = server.receive(Some(u32::MAX));
match receive_client {
ReceiveMessage::Message(recv_message) => {
println!("서버가 받은 메세지: {:?}", recv_message);
}
ReceiveMessage::Exit => {
println!("Exiting...");
}
ReceiveMessage::MessageError(e) => {
eprintln!("Error: {}", e);
}
ReceiveMessage::Timeout => {
println!("Timeout");
}
};
ez_trans.terminate()?;
Ok(())
}