From f234dc1564d35a4114a1c752f13b39d8db030c6f Mon Sep 17 00:00:00 2001 From: afonya <adamhir@freemail.hu> Date: Wed, 18 Jun 2025 18:00:46 +0200 Subject: [PATCH] added a way to create a network connection --- docs/docs/enviroment.md | 1 + .../version-1.0.0/enviroment.md | 1 + extension/astrolang-extension-1.0.2.vsix | Bin 0 -> 19002 bytes extension/index.js | 1 + extension/package.json | 2 +- src/enviroment.rs | 42 +++++++++++++++++- src/main.rs | 2 +- test.asl | 19 ++++---- 8 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 extension/astrolang-extension-1.0.2.vsix diff --git a/docs/docs/enviroment.md b/docs/docs/enviroment.md index 54e6b31..893e3fc 100644 --- a/docs/docs/enviroment.md +++ b/docs/docs/enviroment.md @@ -119,6 +119,7 @@ Példa: `kábel.halgass` |Név|Leírás|Használat|Példa| |---|---|---|---| |halgass|Hallgat egy porton.|`halgass(host: string, port: number): halgató`|`halgass(szaft"0.0.0.0"szaft,1010)`| +|kapcsolódj|Rákapcsolódik egy célra.|`kapcsolódj(target: string): kapcsolat`|`kapcsolódj(szaft"example.com:80"szaft)`| :::warning diff --git a/docs/versioned_docs/version-1.0.0/enviroment.md b/docs/versioned_docs/version-1.0.0/enviroment.md index 54e6b31..893e3fc 100644 --- a/docs/versioned_docs/version-1.0.0/enviroment.md +++ b/docs/versioned_docs/version-1.0.0/enviroment.md @@ -119,6 +119,7 @@ Példa: `kábel.halgass` |Név|Leírás|Használat|Példa| |---|---|---|---| |halgass|Hallgat egy porton.|`halgass(host: string, port: number): halgató`|`halgass(szaft"0.0.0.0"szaft,1010)`| +|kapcsolódj|Rákapcsolódik egy célra.|`kapcsolódj(target: string): kapcsolat`|`kapcsolódj(szaft"example.com:80"szaft)`| :::warning diff --git a/extension/astrolang-extension-1.0.2.vsix b/extension/astrolang-extension-1.0.2.vsix new file mode 100644 index 0000000000000000000000000000000000000000..0651d87085c128a8db11c2728c4cad420dfe251b GIT binary patch literal 19002 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 R$_oQG5Pk<HN?msl4*(B2!s!42 literal 0 HcmV?d00001 diff --git a/extension/index.js b/extension/index.js index e9adb88..c07fe37 100644 --- a/extension/index.js +++ b/extension/index.js @@ -66,6 +66,7 @@ vscode.languages.registerCompletionItemProvider('astrolang', { "vége", "halgass", + "kapcsolódj", "kérés", "írj", "olvass", diff --git a/extension/package.json b/extension/package.json index a6cb29a..36ff78e 100644 --- a/extension/package.json +++ b/extension/package.json @@ -2,7 +2,7 @@ "name": "astrolang-extension", "displayName": "Astro Lang", "icon": "asl.png", - "version": "1.0.1", + "version": "1.0.2", "description": "The extension for Astro Lang", "license": "MIT", "author": "Afonya", diff --git a/src/enviroment.rs b/src/enviroment.rs index 40cfb12..4a99d64 100644 --- a/src/enviroment.rs +++ b/src/enviroment.rs @@ -436,12 +436,12 @@ fn kabel_irj(machine: &mut Machine, op: &DecompiledOperation, args: Vec<VMMemory if stream.is_none() { error(String::from("Stream is not a TcpStream"), machine, op); } - let mut listener = stream.unwrap(); + let mut stream = stream.unwrap(); let write = match &args[1] { VMMemory::String(s) => s.value.clone(), _ => String::new() }; - match listener.write_all(write.as_bytes()) { + match stream.write_all(write.as_bytes()) { Ok(_) => {}, Err(e) => { error(format!("Failed to write to stream: {}", e), machine, op); @@ -540,6 +540,40 @@ fn kabel_keres(machine: &mut Machine, op: &DecompiledOperation, args: Vec<VMMemo } return VMMemory::Null(VMMemoryNull { variable_id: 0 }); } +fn kabel_kapcsolodj(machine: &mut Machine, op: &DecompiledOperation, args: Vec<VMMemory>) -> VMMemory { + arg_expect(&args, 0, "string", machine, op); + let str = match &args[0] { + VMMemory::String(s) => s.value.clone(), + _ => String::new() + }; + let stream = match TcpStream::connect(&str) { + Ok(s) => s, + Err(err) => { + error(format!("Failed to connect to {}: {}", str, err), machine, op); + return VMMemory::Null(VMMemoryNull { variable_id: 0 }); + } + }; + machine.storage.push(Box::new(stream)); + let ret_table: Vec<TableValue> = vec![ + TableValue { + key: VMMemory::String(VMMemoryString { value: String::from("olvass"), variable_id: 0 }), + value: VMMemory::NativeFunction(VMMemoryNativeFunction { func: kabel_olvass, variable_id: 0 }), + }, + TableValue { + key: VMMemory::String(VMMemoryString { value: String::from("írj"), 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 { + key: VMMemory::String(VMMemoryString { value: String::from("id"), variable_id: 0 }), + value: VMMemory::Number(VMMemoryNumber { value: (machine.storage.len()-1) as f64, variable_id: 0 }), + } + ]; + return VMMemory::Table(VMMemoryTable { values: ret_table, variable_id: 0 }); +} fn kabel_halgass(machine: &mut Machine, op: &DecompiledOperation, args: Vec<VMMemory>) -> VMMemory { arg_expect(&args, 0, "string", machine, op); arg_expect(&args, 1, "number", machine, op); @@ -1161,6 +1195,10 @@ pub fn generate() -> HashMap<String, VMMemory> { TableValue { key: VMMemory::String(VMMemoryString { value: String::from("halgass"), variable_id: 0 }), value: VMMemory::NativeFunction(VMMemoryNativeFunction { func: kabel_halgass, variable_id: 0 }), + }, + TableValue { + key: VMMemory::String(VMMemoryString { value: String::from("kapcsolódj"), variable_id: 0 }), + value: VMMemory::NativeFunction(VMMemoryNativeFunction { func: kabel_kapcsolodj, variable_id: 0 }), } ]; mem.insert(String::from("kábel"), VMMemory::Table(VMMemoryTable { values: kabel, variable_id: 0 })); diff --git a/src/main.rs b/src/main.rs index 3de6c12..291e975 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,7 +10,7 @@ mod virtualmachine; mod errors; mod decompiler; -const CLIVER: [u8; 3] = [1,0,0]; +const CLIVER: [u8; 3] = [1,0,1]; #[derive(Debug, Clone)] struct Context { diff --git a/test.asl b/test.asl index 5b5aa9a..c56098e 100644 --- a/test.asl +++ b/test.asl @@ -1,11 +1,8 @@ -lőcsve test() { - lőcsve toast() { - ugass(2) - } - toast() - ugass(1) -} -gethelj k = krumpli.létrehoz(test) -ugass(krumpli.státusz(k)) -krumpli.folytat(k) -ugass(krumpli.státusz(k)) \ No newline at end of file +gethelj con = kábel.kapcsolódj(szaft"example.com:80"szaft) +con.írj(con, szaft"GET / HTTP/1.1 +User-Agent: Astro Lang +Host: example.com + +"szaft) +ugass(con.olvass(con, 5120)) +con.zár(con) \ No newline at end of file