mirror of
https://github.com/mii443/encrypt.git
synced 2025-08-22 15:05:33 +00:00
add server and client value passing
This commit is contained in:
4
client.gpsl
Normal file
4
client.gpsl
Normal file
@ -0,0 +1,4 @@
|
||||
fn main() {
|
||||
send("test");
|
||||
println(receive());
|
||||
}
|
3
server.gpsl
Normal file
3
server.gpsl
Normal file
@ -0,0 +1,3 @@
|
||||
fn main() {
|
||||
send(receive());
|
||||
}
|
@ -2,7 +2,7 @@ use serde::Deserializer;
|
||||
|
||||
use crate::gpsl::{permission::Permission, variable::Variable};
|
||||
use std::{
|
||||
io::Read,
|
||||
io::{BufRead, BufReader, Read, Write},
|
||||
net::TcpStream,
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
@ -71,6 +71,7 @@ pub const STD_FUNC: fn(
|
||||
}
|
||||
}
|
||||
"receive" => {
|
||||
println!("Waiting for client...");
|
||||
let mut buffer = String::default();
|
||||
let data = data.unwrap();
|
||||
let mut stream = data.stream.lock().unwrap();
|
||||
@ -79,12 +80,31 @@ pub const STD_FUNC: fn(
|
||||
Some(stream) => stream,
|
||||
None => panic!("Cannot access to tcp stream"),
|
||||
};
|
||||
stream.read_to_string(&mut buffer).unwrap();
|
||||
let mut reader = BufReader::new(stream);
|
||||
reader.read_line(&mut buffer).unwrap();
|
||||
ExternalFuncReturn {
|
||||
status: ExternalFuncStatus::SUCCESS,
|
||||
value: Some(serde_json::from_str(&buffer).unwrap()),
|
||||
}
|
||||
}
|
||||
"send" => {
|
||||
let data = data.unwrap();
|
||||
let mut stream = data.stream.lock().unwrap();
|
||||
|
||||
let stream = match &mut *stream {
|
||||
Some(stream) => stream,
|
||||
None => panic!("Cannot access to tcp stream"),
|
||||
};
|
||||
|
||||
let value = serde_json::to_string(&args[0]).unwrap();
|
||||
|
||||
stream.write_fmt(format_args!("{}\n", value)).unwrap();
|
||||
|
||||
ExternalFuncReturn {
|
||||
status: ExternalFuncStatus::SUCCESS,
|
||||
value: None,
|
||||
}
|
||||
}
|
||||
_ => ExternalFuncReturn {
|
||||
status: ExternalFuncStatus::NOTFOUND,
|
||||
value: None,
|
||||
|
21
src/main.rs
21
src/main.rs
@ -56,6 +56,9 @@ struct Args {
|
||||
|
||||
#[clap(short, long, value_parser)]
|
||||
file: String,
|
||||
|
||||
#[clap(short, long, value_parser)]
|
||||
ip: Option<String>,
|
||||
}
|
||||
|
||||
fn listen_tcp_server(port: u16) -> TcpStream {
|
||||
@ -63,7 +66,6 @@ fn listen_tcp_server(port: u16) -> TcpStream {
|
||||
for stream in listener.incoming() {
|
||||
match stream {
|
||||
Ok(stream) => {
|
||||
println!("New connection: {}", stream.peer_addr().unwrap());
|
||||
return stream;
|
||||
}
|
||||
Err(e) => {
|
||||
@ -76,13 +78,8 @@ fn listen_tcp_server(port: u16) -> TcpStream {
|
||||
|
||||
fn main() {
|
||||
let args = Args::parse();
|
||||
let s = serde_json::to_string(&Variable::Number { value: 0 });
|
||||
println!("{}", s.unwrap());
|
||||
|
||||
match &*args.mode {
|
||||
"gpsl" => {
|
||||
let mut source =
|
||||
Source::new(fs::read_to_string(&(args.file)).expect("Cannot read file."));
|
||||
let mut source = Source::new(fs::read_to_string(&(args.file)).expect("Cannot read file."));
|
||||
|
||||
let mut tokenizer = Tokenizer::new();
|
||||
tokenizer.tokenize(&mut source).unwrap();
|
||||
@ -92,7 +89,12 @@ fn main() {
|
||||
local_vars: HashMap::new(),
|
||||
};
|
||||
|
||||
let stream = listen_tcp_server(8080);
|
||||
let stream = match &*args.mode {
|
||||
"server" => listen_tcp_server(8080),
|
||||
"client" => TcpStream::connect(args.ip.unwrap()).unwrap(),
|
||||
_ => panic!("Cannot start tcp stream."),
|
||||
};
|
||||
|
||||
let mut gpsl = GPSL::new(
|
||||
source,
|
||||
Some(parser.functions().unwrap()),
|
||||
@ -103,7 +105,4 @@ fn main() {
|
||||
if let Err(err) = res {
|
||||
println!("Error: {:?}", err);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user