added more networking functions
This commit is contained in:
parent
f2220d1014
commit
79d4c36440
1 changed files with 42 additions and 1 deletions
|
@ -1,4 +1,4 @@
|
||||||
use std::{collections::HashMap, io::{BufRead, BufReader, Read, Write}, net::{self, TcpListener, TcpStream}, process, thread::sleep, time::Duration};
|
use std::{collections::HashMap, io::{BufReader, Read, Write}, net::{self, TcpListener, TcpStream}, process, thread::sleep, time::Duration};
|
||||||
|
|
||||||
use crate::{errors::{create_error, print_error, ErrorSubType, ErrorType}, virtualmachine::{DecompiledOperation, Machine, TableValue, VMMemory, VMMemoryNativeFunction, VMMemoryNull, VMMemoryNumber, VMMemoryString, VMMemoryTable}};
|
use crate::{errors::{create_error, print_error, ErrorSubType, ErrorType}, virtualmachine::{DecompiledOperation, Machine, TableValue, VMMemory, VMMemoryNativeFunction, VMMemoryNull, VMMemoryNumber, VMMemoryString, VMMemoryTable}};
|
||||||
|
|
||||||
|
@ -238,6 +238,43 @@ fn kabel_irj(machine: &mut Machine, op: &DecompiledOperation, args: Vec<VMMemory
|
||||||
}
|
}
|
||||||
return VMMemory::Null(VMMemoryNull { variable_id: 0 });
|
return VMMemory::Null(VMMemoryNull { variable_id: 0 });
|
||||||
}
|
}
|
||||||
|
fn kabel_zar(machine: &mut Machine, op: &DecompiledOperation, args: Vec<VMMemory>) -> VMMemory {
|
||||||
|
arg_expect(&args, 0, "table", machine, op);
|
||||||
|
let id = match &args[0] {
|
||||||
|
VMMemory::Table(tbl) => {
|
||||||
|
get_mem_tbl_val(tbl, VMMemory::String(VMMemoryString { value: String::from("id"), variable_id: 0 }))
|
||||||
|
},
|
||||||
|
_ => None
|
||||||
|
};
|
||||||
|
if id.is_none() {
|
||||||
|
error(String::from("Stream not found"), machine, op);
|
||||||
|
}
|
||||||
|
let real_id = match &id.unwrap() {
|
||||||
|
VMMemory::Number(n) => n.value as usize,
|
||||||
|
_ => {
|
||||||
|
error(String::from("Stream is not a number"), machine, op);
|
||||||
|
0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let stored_stream = machine.storage.get(real_id);
|
||||||
|
if stored_stream.is_none() {
|
||||||
|
error(String::from("Stream not found in storage"), machine, op);
|
||||||
|
}
|
||||||
|
let boxed_stream = stored_stream.unwrap();
|
||||||
|
let stream = boxed_stream.downcast_ref::<TcpStream>();
|
||||||
|
if stream.is_none() {
|
||||||
|
error(String::from("Stream is not a TcpStream"), machine, op);
|
||||||
|
}
|
||||||
|
let listener = stream.unwrap();
|
||||||
|
match listener.shutdown(net::Shutdown::Both) {
|
||||||
|
Ok(_) => {},
|
||||||
|
Err(e) => {
|
||||||
|
error(format!("Failed to close stream: {}", e), machine, op);
|
||||||
|
return VMMemory::Null(VMMemoryNull { variable_id: 0 });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return VMMemory::Null(VMMemoryNull { variable_id: 0 });
|
||||||
|
}
|
||||||
fn kabel_keres(machine: &mut Machine, op: &DecompiledOperation, args: Vec<VMMemory>) -> VMMemory {
|
fn kabel_keres(machine: &mut Machine, op: &DecompiledOperation, args: Vec<VMMemory>) -> VMMemory {
|
||||||
arg_expect(&args, 0, "table", machine, op);
|
arg_expect(&args, 0, "table", machine, op);
|
||||||
let id = match &args[0] {
|
let id = match &args[0] {
|
||||||
|
@ -278,6 +315,10 @@ fn kabel_keres(machine: &mut Machine, op: &DecompiledOperation, args: Vec<VMMemo
|
||||||
key: VMMemory::String(VMMemoryString { value: String::from("írj"), variable_id: 0 }),
|
key: VMMemory::String(VMMemoryString { value: String::from("írj"), variable_id: 0 }),
|
||||||
value: VMMemory::NativeFunction(VMMemoryNativeFunction { func: kabel_irj, variable_id: 0 }),
|
value: VMMemory::NativeFunction(VMMemoryNativeFunction { func: kabel_irj, variable_id: 0 }),
|
||||||
},
|
},
|
||||||
|
TableValue {
|
||||||
|
key: VMMemory::String(VMMemoryString { value: String::from("zár"), variable_id: 0 }),
|
||||||
|
value: VMMemory::NativeFunction(VMMemoryNativeFunction { func: kabel_zar, variable_id: 0 }),
|
||||||
|
},
|
||||||
TableValue {
|
TableValue {
|
||||||
key: VMMemory::String(VMMemoryString { value: String::from("id"), variable_id: 0 }),
|
key: VMMemory::String(VMMemoryString { value: String::from("id"), variable_id: 0 }),
|
||||||
value: VMMemory::Number(VMMemoryNumber { value: (machine.storage.len()-1) as i64, variable_id: 0 }),
|
value: VMMemory::Number(VMMemoryNumber { value: (machine.storage.len()-1) as i64, variable_id: 0 }),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue