diff --git a/Cargo.lock b/Cargo.lock index 4030817..0769e8a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -994,6 +994,7 @@ dependencies = [ "http-body-util", "hyper", "pin-project-lite", + "rosu-map", "rosu-mem", "rosu-pp", "serde", diff --git a/Cargo.toml b/Cargo.toml index e82270b..0af3f8e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "rosu-memory" version = "2.0.1" -edition = "2021" +edition = "2024" [dependencies] rosu-mem = "3.0.0" @@ -20,6 +20,7 @@ async-dup = "1.2.2" hyper = { version = "1.6.0", default-features = false, features = ["server", "http1"] } http-body-util = "0.1.3" pin-project-lite = "0.2.16" +rosu-map = "0.2.1" [features] tracy-profile = ["tracy-client/default"] diff --git a/examples/MaximalLime/index.js b/examples/MaximalLime/index.js index fa54bbe..1156f9c 100644 --- a/examples/MaximalLime/index.js +++ b/examples/MaximalLime/index.js @@ -9,65 +9,66 @@ let miss = document.getElementById("h0"); let time = document.getElementById("time"); socket.onopen = () => { - console.log("Successfully Connected"); + console.log("Successfully Connected"); }; -socket.onclose = event => { - console.log("Socket Closed Connection: ", event); - socket.send("Client Closed!") +socket.onclose = (event) => { + console.log("Socket Closed Connection: ", event); + socket.send("Client Closed!"); }; -socket.onerror = error => { - console.log("Socket Error: ", error); +socket.onerror = (error) => { + console.log("Socket Error: ", error); }; let tempState; let tempImg; -socket.onmessage = event => { - let data = JSON.parse(event.data); - if (tempState !== data.beatmap.paths.background_path_full) { - tempState = data.beatmap.paths.background_path_full - bg.setAttribute('src', `http://127.0.0.1:9001/Songs/${data.beatmap.paths.background_path_full}`) - } - if (data.playtime > 1000) { - let seconds = (data.playtime/1000).toFixed(0); - let minutes = Math.floor(seconds % 3600 / 60).toString(); - - if (seconds > 60) { - time.innerHTML = `${minutes}m ${seconds-(minutes*60)}s` - } else { - time.innerHTML = `${seconds}s` - } - } - if (data.gameplay.current_pp != '') { - let ppData = data.current_pp; - pp.innerHTML = Math.round(ppData) + "pp" - } else { - pp.innerHTML = 0 + "pp" - } - if (data.stars_mods != '') { - let SR = data.stars_mods; - star.innerHTML = SR.toFixed(2) - } else { - star.innerHTML = 0 - } - if (data.gameplay.hit_100 > 0) { - hun.innerHTML = data.gameplay.hit_100; - } else { - hun.innerHTML = 0 - } - if (data.gameplay.hit_50 > 0) { - fifty.innerHTML = data.gameplay.hit_50; - } else { - fifty.innerHTML = 0 - } - if (data.gameplay.hit_miss > 0) { - miss.innerHTML = data.gameplay.hit_miss; - } else { - miss.innerHTML = 0 - } -} - +socket.onmessage = (event) => { + let data = JSON.parse(event.data); + if (tempState !== data.beatmap.paths.background_path_full) { + tempState = data.beatmap.paths.background_path_full; + bg.setAttribute( + "src", + `http://127.0.0.1:24050/Songs/${data.beatmap.paths.background_path_full}`, + ); + } + if (data.playtime > 1000) { + let seconds = (data.playtime / 1000).toFixed(0); + let minutes = Math.floor((seconds % 3600) / 60).toString(); + if (seconds > 60) { + time.innerHTML = `${minutes}m ${seconds - minutes * 60}s`; + } else { + time.innerHTML = `${seconds}s`; + } + } + if (data.gameplay.current_pp != "") { + let ppData = data.current_pp; + pp.innerHTML = Math.round(ppData) + "pp"; + } else { + pp.innerHTML = 0 + "pp"; + } + if (data.stars_mods != "") { + let SR = data.stars_mods; + star.innerHTML = SR.toFixed(2); + } else { + star.innerHTML = 0; + } + if (data.gameplay.hit_100 > 0) { + hun.innerHTML = data.gameplay.hit_100; + } else { + hun.innerHTML = 0; + } + if (data.gameplay.hit_50 > 0) { + fifty.innerHTML = data.gameplay.hit_50; + } else { + fifty.innerHTML = 0; + } + if (data.gameplay.hit_miss > 0) { + miss.innerHTML = data.gameplay.hit_miss; + } else { + miss.innerHTML = 0; + } +}; //Received: '{"menuContainer":{"osuState":2,"bmID":1219126,"bmSetID":575767,"CS":4,"AR":9.5,"OD":8,"HP":6,"bmInfo":"BTS - Not Today [Tomorrow]","bmFolder":"575767 BTS - Not Today","pathToBM":"BTS - Not Today (DeRandom Otaku) [Tomorrow].osu","bmCurrentTime":8861,"bmMinBPM":0,"bmMaxBPM":0},"gameplayContainer":{"300":21,"100":0,"50":0,"miss":0,"accuracy":100,"score":24612,"combo":36,"gameMode":0,"appliedMods":2048,"maxCombo":36,"pp":""}}' diff --git a/src/consts.rs b/src/consts.rs index 94d9af4..bccb82f 100644 --- a/src/consts.rs +++ b/src/consts.rs @@ -1,19 +1,5 @@ -/* - - PreSongSelectAddresses - Base int64 `sig:"F8 01 74 04 83 65"` - MenuMods int64 `sig:"C8 FF ?? ?? ?? ?? ?? 81 0D ?? ?? ?? ?? 00 08 00 00"` - PlayTime int64 `sig:"5E 5F 5D C3 A1 ?? ?? ?? ?? 89 ?? 04"` - ChatChecker int64 `sig:"0A D7 23 3C 00 00 ?? 01"` - SkinData int64 `sig:"75 21 8B 1D"` - Rulesets int64 `sig:"7D 15 A1 ?? ?? ?? ?? 85 C0"` - ChatArea int64 `sig:"33 47 9D FF 5B 7F FF FF"` -*/ - use rosu_memory::memory::signature::Signature; -//pub struct - pub struct StaticSignatures { pub base: Signature, pub menu_mods: Signature, @@ -24,7 +10,3 @@ pub struct StaticSignatures { pub chat_area: Signature, pub audio_time_base: Signature, } - -//impl StaticSignatures { - //fn read -//} diff --git a/src/network/mod.rs b/src/network/mod.rs index 432d645..0eb119a 100644 --- a/src/network/mod.rs +++ b/src/network/mod.rs @@ -10,20 +10,20 @@ use crate::{ }; use self::smol_hyper::SmolIo; -use smol::{prelude::*, Async}; +use smol::{Async, prelude::*}; use async_tungstenite::{ - tungstenite::{handshake::derive_accept_key, protocol::Role, Message}, WebSocketStream, + tungstenite::{Message, handshake::derive_accept_key, protocol::Role}, }; use eyre::Result; use hyper::{ + Request, Response, StatusCode, body::Bytes, - header::{HeaderValue, CONNECTION, SEC_WEBSOCKET_ACCEPT, SEC_WEBSOCKET_KEY, UPGRADE}, + header::{CONNECTION, HeaderValue, SEC_WEBSOCKET_ACCEPT, SEC_WEBSOCKET_KEY, UPGRADE}, server::conn::http1, service::service_fn, - Request, Response, StatusCode, }; pub async fn handle_clients(values: Arm, clients: Clients) { diff --git a/src/reading_loop.rs b/src/reading_loop.rs index 1653474..eebe1b1 100644 --- a/src/reading_loop.rs +++ b/src/reading_loop.rs @@ -1,6 +1,7 @@ -use std::mem::size_of; +use std::{fs::File, io::Read, mem::size_of}; use eyre::Result; +use rosu_map::section::events::Events; use rosu_pp::{Beatmap, GameMods}; use tracy_client::*; @@ -265,17 +266,21 @@ pub fn process_reading_loop(p: &Process, state: &mut State) -> Result<()> { || values.prev_menu_mode != values.menu_mode) && values.beatmap.paths.beatmap_full_path.exists() { - let current_beatmap = match Beatmap::from_path(&values.beatmap.paths.beatmap_full_path) - { + let mut file = File::open(&values.beatmap.paths.beatmap_full_path)?; + let mut beatmap_buff = Vec::new(); + file.read_to_end(&mut beatmap_buff)?; + + let events_section = rosu_map::from_bytes::(&beatmap_buff)?; + + let current_beatmap = match Beatmap::from_bytes(&beatmap_buff) { Ok(beatmap) => { new_map = true; - /* - TODO bring back background - values.beatmap.paths.background_file.clone_from( - &beatmap.background.filename - ); - */ + values + .beatmap + .paths + .background_file + .clone_from(&events_section.background_file); if let Some(hobj) = beatmap.hit_objects.last() { values.beatmap.last_obj_time = hobj.start_time;