some small things
Some checks failed
Build and Test / splatoon (push) Failing after 15s
Build and Test / friends (push) Failing after 16s

This commit is contained in:
Maple 2026-04-26 14:36:42 +02:00
commit 18c8ec77dd
2 changed files with 45 additions and 19 deletions

View file

@ -13,7 +13,8 @@ v-byte-helpers = { git = "https://github.com/RusticMaple/VByteMacros", version =
simplelog = "0.12.2" simplelog = "0.12.2"
chrono = "0.4.39" chrono = "0.4.39"
log = "0.4.25" log = "0.4.25"
rand = "0.8.5" rand = "0.8.5
"
cfg-if = "1.0.4" cfg-if = "1.0.4"
hmac = "0.12.1" hmac = "0.12.1"
md-5 = "^0.10.6" md-5 = "^0.10.6"
@ -29,13 +30,17 @@ ureq = { version = "3.1.4", features = [ "json" ] }
serde = { version = "1.0.228", features = [ "derive" ] } serde = { version = "1.0.228", features = [ "derive" ] }
serde_json = "1.0.149" serde_json = "1.0.149"
[dependencies.sqlx]
version = "0.8.6"
optional = true
[dev-dependencies] [dev-dependencies]
# criterion = "0.7.0" # criterion = "0.7.0"
[features] [features]
rmc_struct_header = [] rmc_struct_header = []
guest_login = [] guest_login = []
friends = ["guest_login"] friends = ["guest_login", "dep:sqlx"]
big_pid = [] big_pid = []
v3-8-15 = ["rmc_struct_header"] v3-8-15 = ["rmc_struct_header"]
v4-3-11 = ["v3-8-15"] v4-3-11 = ["v3-8-15"]

View file

@ -1,24 +1,26 @@
use std::ops::Deref;
use std::sync::Arc;
use log::{error, info};
use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt};
use tokio::sync::mpsc::{channel, Receiver, Sender};
use tokio::sync::Notify;
use tokio::task;
use crate::reggie::{UnitPacketRead, UnitPacketWrite}; use crate::reggie::{UnitPacketRead, UnitPacketWrite};
use log::{error, info};
use std::iter::FilterMap;
use std::ops::Deref;
use std::sync::{Arc, Weak};
use std::{slice, vec};
use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt};
use tokio::sync::Notify;
use tokio::sync::mpsc::{Receiver, Sender, channel};
use tokio::task;
#[derive(Clone)] #[derive(Clone)]
pub struct SendingBufferConnection(Sender<Vec<u8>>, Arc<Notify>); pub struct SendingBufferConnection(Sender<Vec<u8>>, Arc<Notify>);
pub struct SplittableBufferConnection(SendingBufferConnection, Receiver<Vec<u8>>); pub struct SplittableBufferConnection(SendingBufferConnection, Receiver<Vec<u8>>);
impl AsRef<SendingBufferConnection> for SplittableBufferConnection{ impl AsRef<SendingBufferConnection> for SplittableBufferConnection {
fn as_ref(&self) -> &SendingBufferConnection { fn as_ref(&self) -> &SendingBufferConnection {
&self.0 &self.0
} }
} }
impl Deref for SplittableBufferConnection{ impl Deref for SplittableBufferConnection {
type Target = SendingBufferConnection; type Target = SendingBufferConnection;
fn deref(&self) -> &Self::Target { fn deref(&self) -> &Self::Target {
@ -26,9 +28,7 @@ impl Deref for SplittableBufferConnection{
} }
} }
impl<T: Send + Unpin + AsyncWrite + AsyncRead + 'static> From<T> for SplittableBufferConnection {
impl<T: Send + Unpin + AsyncWrite + AsyncRead + 'static> From<T> for SplittableBufferConnection{
fn from(value: T) -> Self { fn from(value: T) -> Self {
Self::new(value) Self::new(value)
} }
@ -48,7 +48,6 @@ impl SplittableBufferConnection {
let mut recver = inside_recv; let mut recver = inside_recv;
let mut stream = stream; let mut stream = stream;
loop { loop {
tokio::select! { tokio::select! {
data = recver.recv() => { data = recver.recv() => {
@ -81,7 +80,7 @@ impl SplittableBufferConnection {
} }
} }
} }
if let Err(e) = stream.shutdown().await{ if let Err(e) = stream.shutdown().await {
error!("failed to shut down stream: {}", e); error!("failed to shut down stream: {}", e);
} }
}); });
@ -91,11 +90,11 @@ impl SplittableBufferConnection {
} }
} }
impl SendingBufferConnection{ impl SendingBufferConnection {
pub async fn send(&self, buffer: Vec<u8>) -> Option<()>{ pub async fn send(&self, buffer: Vec<u8>) -> Option<()> {
self.0.send(buffer).await.ok() self.0.send(buffer).await.ok()
} }
pub fn is_alive(&self) -> bool{ pub fn is_alive(&self) -> bool {
!self.0.is_closed() !self.0.is_closed()
} }
pub async fn disconnect(&self) { pub async fn disconnect(&self) {
@ -106,12 +105,34 @@ impl SendingBufferConnection{
} }
} }
impl SplittableBufferConnection{ impl SplittableBufferConnection {
pub async fn recv(&mut self) -> Option<Vec<u8>>{ pub async fn recv(&mut self) -> Option<Vec<u8>> {
self.1.recv().await self.1.recv().await
} }
pub fn duplicate_sender(&self) -> SendingBufferConnection{ pub fn duplicate_sender(&self) -> SendingBufferConnection {
self.0.clone() self.0.clone()
} }
} }
struct WeakVec<T>(Vec<Weak<T>>);
impl<T> WeakVec<T> {
pub fn new() -> Self {
Self(vec![])
}
pub fn from_vec(vec: Vec<Weak<T>>) -> Self {
Self(vec)
}
pub fn push(&mut self, val: Weak<T>) {
self.0.retain(|v| v.upgrade().is_some());
self.0.push(val);
}
pub fn iter(&self) -> impl Iterator<Item = Arc<T>> {
self.0.iter().filter_map(|w| w.upgrade())
}
}