From c53138b163028f3f7ae935e574bf87691a06e1bb Mon Sep 17 00:00:00 2001 From: deadvey Date: Mon, 27 Apr 2026 17:26:49 +0100 Subject: [PATCH] got api working ish, I need to clean this code up a lot --- $h | 36 ++ .qtcreator/project.json | 30 + .qtcreator/project.json.user | 294 +++++++++ .~lock.report.odt# | 2 +- Cargo.lock | 640 +++++++++++++++++++ Cargo.toml | 3 + report.odt | Bin 12875 -> 13093 bytes src/{parsing/.strings.rs.swp => .api.rs.swp} | Bin 12288 -> 12288 bytes src/.parsing.rs.swp | Bin 12288 -> 0 bytes src/api.rs | 41 ++ src/config.rs | 1 + src/main.rs | 38 +- src/parsing.rs | 101 +-- 13 files changed, 1143 insertions(+), 43 deletions(-) create mode 100644 $h create mode 100644 .qtcreator/project.json create mode 100644 .qtcreator/project.json.user rename src/{parsing/.strings.rs.swp => .api.rs.swp} (87%) delete mode 100644 src/.parsing.rs.swp create mode 100644 src/api.rs create mode 100644 src/config.rs diff --git a/$h b/$h new file mode 100644 index 0000000..31f65fb --- /dev/null +++ b/$h @@ -0,0 +1,36 @@ +use warp::Filter; +use std::{ + thread, + sync::{Arc, Mutex}, +} +use crate::config; +use serde::{Deserialize, Serialize}; +use crate::mpsc::*; +use tokio::sync::RwLock; +use crate::api; + +#[derive(Debug, Deserialize, Serialize, Clone)] +pub struct Data_to_send { + pub action_type: String, + pub content: String, + pub character: String, +} +#[derive(Debug, Deserialize, Serialize, Clone)] +pub struct Data_to_receive { + pub response: String, +} + +pub async fn api_process(data_to_send: Arc) +{ + let route = warp::path("happening") + .map({ + let state = Arc::clone(&data_to_send); + move || { + let current_data = state.lock().unwrap().clone(); + warp::reply::json(current_data) + } + }); + warp::serve(routes) + .run(([127, 0, 0, 1],config::API_PORT)); + .await; +} diff --git a/.qtcreator/project.json b/.qtcreator/project.json new file mode 100644 index 0000000..d9860ad --- /dev/null +++ b/.qtcreator/project.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://download.qt.io/official_releases/qtcreator/latest/installer_source/jsonschemas/project.json", + "build.configuration": [ + { + "name": "cargo build", + "steps": [ + { + "arguments": [ + "build" + ], + "executable": "cargo", + "workingDirectory": "%{ActiveProject:ProjectDirectory}" + } + ] + } + ], + "files.exclude": [ + ".qtcreator/project.json.user" + ], + "targets": [ + { + "arguments": [ + "run" + ], + "executable": "cargo", + "name": "cargo run", + "workingDirectory": "%{ActiveProject:ProjectDirectory}" + } + ] +} diff --git a/.qtcreator/project.json.user b/.qtcreator/project.json.user new file mode 100644 index 0000000..c285834 --- /dev/null +++ b/.qtcreator/project.json.user @@ -0,0 +1,294 @@ + + + + + + EnvironmentId + {feb331f8-7617-4b45-82a8-67687dcf787d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + true + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 0 + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + false + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 6 + true + + + + true + + 0 + + + + ProjectExplorer.Project.Target.0 + + Desktop + true + Desktop + Desktop + {120e6ad0-5207-4289-8a6a-7630e1616590} + 0 + 0 + 0 + + /home/deadvey/code/rust/happening + + + true + build + cargo + %{ActiveProject:ProjectDirectory} + /home/deadvey/code/rust/happening + ProjectExplorer.ProcessStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + 0 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + cargo build + WorkspaceProject.BuildConfiguration + 0 + 0 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + + 2 + + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + cargo run + WorkspaceProject.RunConfiguration: + cargo run1 + false + + true + true + false + run + cargo + %{ActiveProject:ProjectDirectory} + + 1 + + true + cargo build + + + + build + + cargo + %{ActiveProject:ProjectDirectory} + + + + + + /home/deadvey/code/rust/happening/build + + 0 + Build + Build + ProjectExplorer.BuildSteps.Build + + + 0 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Default + WorkspaceProject.BuildConfiguration + 0 + 0 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + + 2 + + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + cargo run + WorkspaceProject.RunConfiguration: + cargo run1 + false + + true + true + false + run + cargo + %{ActiveProject:ProjectDirectory} + + 1 + + 2 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + + 2 + + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + cargo run + WorkspaceProject.RunConfiguration: + cargo run1 + false + + true + true + false + run + cargo + %{ActiveProject:ProjectDirectory} + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + Version + 22 + + diff --git a/.~lock.report.odt# b/.~lock.report.odt# index 64ba272..1f82241 100644 --- a/.~lock.report.odt# +++ b/.~lock.report.odt# @@ -1 +1 @@ -,deadvey,linux-pc,05.04.2026 21:48,file:///home/deadvey/.config/libreoffice/4; \ No newline at end of file +,deadvey,linux-pc,07.04.2026 00:08,file:///home/deadvey/.config/libreoffice/4; \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 9096bc9..ba88abf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,646 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-sink", + "futures-task", + "pin-project-lite", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "h2" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "happening-server" version = "0.1.0" +dependencies = [ + "serde", + "tokio", + "warp", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64", + "bytes", + "headers-core", + "http", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http", +] + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "bytes", + "http", + "http-body", + "hyper", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "indexmap" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "libc" +version = "0.2.184" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "mio" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project" +version = "1.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tokio" +version = "1.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bd1c4c0fc4a7ab90fc15ef6daaa3ec3b893f004f915f2392557ed23237820cd" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "log", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "warp" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d06d9202adc1f15d709c4f4a2069be5428aa912cc025d6f268ac441ab066b0" +dependencies = [ + "bytes", + "futures-util", + "headers", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", + "tower-service", + "tracing", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/Cargo.toml b/Cargo.toml index 3c7f246..94a3e47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,3 +4,6 @@ version = "0.1.0" edition = "2024" [dependencies] +serde = { version = "1.0.228", features = ["derive"] } +tokio = { version = "1.51.0", features = ["rt-multi-thread","macros"] } +warp = { version = "0.4.2", features = ["server"] } diff --git a/report.odt b/report.odt index 18ffc8234f4f934279e9e3bb5b4e8c6e843cac6d..15a4491885f82b21eaab739796c8bb294fdc1e62 100644 GIT binary patch delta 7553 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 Cra^iD delta 7383 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 diff --git a/src/.parsing.rs.swp b/src/.parsing.rs.swp deleted file mode 100644 index 9a669e01459201d543d3546885e832cea9e2b400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmYc?2=nw+u+%eRU|?VnU|^^fznuB2Glb!LI|D;XYGO)RY9&YpFV4x#E3MEiNXDy( zfq|h8YM_2{eoCr-QE73Benw(JL26!RUb=p9QL=tPVo`BsUbIK|Jvu$P~KVGln8!#sWlh6;WL zh7^7V27i7A20?xXh7WuU4Da|D7%uZMFzn)EVA#UPz_5{zfnh2i14APp1A{*w1A{Uj z1A{Cd1H&y|28PAF3=9Rl3=EmP3=A^73=DU97#ObcFfjD5&A@Pi zn}J~=Hv_{gZU%-a+zbpw+zbr9+zbrv+zbrH+zbr5+zbq|+zbrj+zbr&xfmF3b1^X7 z;9_97#>K#Jm5YI4H5UVeA{PS#6Bh#m0~Z6sT}}pu>zoV>S2!6ME^;z3Z02NOSkKA8 zFq@Nsp_r3_A(xYZL6wt%fuECsfq|2O;U@3NyOsVNGH#R`cK zL!i!rdXAHm6RQV9^AeMCQWZ+_LB32;C@v|=%u9zm5$-vV_995Q_-AV%0#H{09FUrz zKm@7bLp{A%aMW;eLXA)=POL0ef}5@gk+>5MM`F|LUCecW?s5Naei)UNk(Q~x{g9|zCwCYViGte zN>VFI6cY1N6bcfHixn~<=0L23xEbs;y^{R+oc!|CqU6NlR1HnN#9~l*Xn%tX>n#%s)8*fW~>>i z88j4vQj1G-N^HO~I%?|0C5a`O$)L!#Q_y5c%R_iM9<)F+RRbKUP?K~Nz|JeSQcw#^ zO}0@hE-A9pLDG?zn44;)5DZQ@Na7&%AcuJ*7H9Y-7Fb!?U?{P&a)zaUJ52>$I|hAy zg#gF`QH1#lMX5Q7C8;UMslJ$j0h*OT*%@oPCL!a3Jqs@i;Q0lS+%+_z2^SPIoSdLs z2ug8i(W+o;tDuycm!bqtO#1o?zL~|zsW~~Rd8zrO#i-5)Wfic~;kI#tiksA;qWmIo zI)GY^5QLT)oc`GwnR&@Ysky0nC190s9#jRyjht{#K~fUDph1pcZ9^ReXy!qRxOh;6 z>L{pzA`h;u7?kWdIYA{8D2qT$&jk4j>K0J(n6HqS1}e+I`3e@Z>L5k%@~RjdI7o$r zOFl~WQYgTm-CMFF7YaFI7WR zCoi=;9xeql1)PUaWE5316%vb5;aRmLAIa|^9au^^NVw9LHBl2irMQV*;LT23k0Dj0xDJ5WiY059@1G%?CMPSlib1xe~emQxIz5GSLQ zh71LzNeXFskl=>qFi>F@1gA+HCVK`B*n@K8n2o8dBs*% JQ2$sn008}@4@dw2 diff --git a/src/api.rs b/src/api.rs new file mode 100644 index 0000000..8336191 --- /dev/null +++ b/src/api.rs @@ -0,0 +1,41 @@ +use warp::Filter; +use std::{ + thread, + sync::{Arc, Mutex}, +}; +use crate::config; +use serde::{Deserialize, Serialize}; +use crate::mpsc::*; +use tokio::sync::RwLock; +use crate::api; + +#[derive(Debug, Deserialize, Serialize, Clone)] +pub struct Data_to_send { + pub action_type: String, + pub content: String, + pub character: String, +} +#[derive(Debug, Deserialize, Serialize, Clone)] +pub struct Data_to_receive { + pub response: String, +} + +pub async fn api_process(data_to_send: Arc>, tx: Sender) +{ + let data_filter = warp::any().map(move || Arc::clone(&data_to_send)); + let tx_filter = warp::any().map(move || tx.clone()); + println!("Running server"); + let route = warp::path("happening") + .and(warp::get()) + .and(data_filter) + .and(tx_filter) + .map(|state: Arc>, tx_handle: Sender| { + println!("GET: {:?}", state); + let reply = state.as_ref(); + tx_handle.send(1); + warp::reply::json(&reply) + }).boxed(); + warp::serve(route) + .run(([127, 0, 0, 1],config::API_PORT)) + .await; +} diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..4f60f44 --- /dev/null +++ b/src/config.rs @@ -0,0 +1 @@ +pub static API_PORT: u16 = 20264; diff --git a/src/main.rs b/src/main.rs index b8527b9..afce756 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,38 @@ -use std::fs; -use std::collections::HashMap; +use std:: +{ + fs, + thread, + collections::HashMap, + sync::{Arc, Mutex, mpsc}, +}; +use serde::{Deserialize, Serialize}; +use tokio::runtime::Runtime; +use tokio::task; +use warp::Filter; mod parsing; mod character; +mod config; +mod api; -fn main() { +#[tokio::main] +async fn main() { + let (tx,rx) = mpsc::channel(); + let mut data_to_send = Arc::new(Mutex::new(api::Data_to_send + { + action_type: "initialise".to_string(), + content: "".to_string(), + character: "".to_string(), + })); + + let data = Arc::clone(&data_to_send); + let tx_clone = tx.clone(); + // Spawn a thread for warp + tokio::spawn( + async move { + api::api_process(data, tx_clone).await; + }); + println!("and continue"); let mut characters = HashMap::::new(); let file_contents: String = fs::read_to_string("stories/story.ha").unwrap(); // Split the file contents into tokens @@ -12,7 +40,9 @@ fn main() { .split_whitespace() .collect(); // Run the parsing process - match parsing::token_parse(&tokens, &mut characters) { + let data_clone = Arc::clone(&data_to_send); + match parsing::token_parse(&tokens, &mut characters, data_clone, &rx).await + { Ok(()) => println!("Program exited successfully"), Err(error) => println!("{}", error), } diff --git a/src/parsing.rs b/src/parsing.rs index b10af6d..787fdc8 100644 --- a/src/parsing.rs +++ b/src/parsing.rs @@ -1,60 +1,82 @@ use std::collections::HashMap; use crate::character; +use crate::api; +use crate::mpsc::*; +use std::{thread}; +use std::sync::{Arc,Mutex}; +use std::time::Duration; mod strings; // Parse the tokens in a file // Returns success or an error string -pub fn token_parse( +pub async fn token_parse( tokens: &Vec<&str>, - mut characters: &mut HashMap:: -) -> ( Result<(),&'static str> ) + mut characters: &mut HashMap::, + data_to_send: Arc>, + rx: &Receiver, +) -> Result<(),String> { let mut index: usize = 0; // Run an infinite loop loop { - match tokens.get(index) { - Some(token) => { - // The instructions are related to characters - if token.chars().next().unwrap() == '@' - { - let character_name: String = token.chars().skip(1).collect(); - // If the character doesn't exist, then create it - if ! characters.contains_key(&character_name) - { - let new_character = character::Character::new(character_name.clone()); - characters.insert(character_name.clone(),new_character); - } - println!("Doing something with a character: {}", character_name); - // The index is incremented to after the character's instructions - index += match character_parse(index+1, &tokens, character_name, &mut characters) - { - Ok(increment) => increment, - Err(error) => return Err(error), - } - } - // Miscelleneous instructions - if token.to_lowercase() == "end" - { - return Ok(()); + match rx.try_recv() + { + Ok(_) => + { + match tokens.get(index) { + Some(token) => { + // The instructions are related to characters + if token.chars().next().unwrap() == '@' + { + let character_name: String = token.chars().skip(1).collect(); + // If the character doesn't exist, then create it + if ! characters.contains_key(&character_name) + { + let new_character = character::Character::new(character_name.clone()); + characters.insert(character_name.clone(),new_character); + } + println!("Doing something with a character: {}", character_name); + // The index is incremented to after the character's instructions + index += match character_parse(index+1, &tokens, character_name, &mut characters, &data_to_send, &rx).await + { + Ok(increment) => { + increment + }, + Err(error) => return Err(error), + } + } + // Miscelleneous instructions + if token.to_lowercase() == "end" + { + return Ok(()) // quit + } + }, + None => return Err(String::from("File reached termination point")), } index += 1; }, - None => return Err("File reached termination point") + Err(_) => thread::sleep(Duration::from_millis(4000)), } } } - // Parsing character related instructions -fn character_parse(index: usize, tokens: &Vec<&str>, character_name: String, characters: &mut HashMap::) -> -( Result ) +async fn character_parse +( + index: usize, + tokens: &Vec<&str>, + character_name: String, + characters: &mut HashMap::, + data_to_send: &Arc>, + rx: &Receiver, +) -> Result { let mut sum_index: usize = index; loop { - - match tokens.get(sum_index) + // Ensure the index is valid (the index is not beyond the vector) + let _ = match tokens.get(sum_index) { Some(token) => { match token.to_lowercase().as_str() @@ -68,18 +90,21 @@ fn character_parse(index: usize, tokens: &Vec<&str>, character_name: String, cha Some(output_string) => { println!("{}", output_string); - return Ok(sum_index - index); + let mut data = data_to_send.lock().unwrap(); + data.action_type = String::from("output"); + data.content = output_string; + data.character = character_name.clone(); }, - None => return Err("Unable to read string"), + None => return Err(String::from("Unable to read string")), } }, // Catch all condition, if the instruction is unrecognised as a // character command - &_ => return Err("Invalid command"), + _ => return Err(String::from("Invalid command")), } }, - None => return Err("File reached termination point") - } + None => return Err(String::from("File reached termination point")) + }; sum_index += 1; } }