mirror of
https://github.com/nestriness/nestri.git
synced 2025-12-11 00:05:36 +02:00
## Description ### First commit Restructured protobuf schemas to make them easier to use across languages, switched to using them in-place of JSON for signaling as well, so there's no 2 different message formats flying about. Few new message types to deal with clients and nestri-servers better (not final format, may see changes still). General cleanup of dead/unused code along some bug squashing and package updates. TODO for future commits: - [x] Fix additional controllers not doing inputs (possibly needs vimputti changes) - [x] ~~Restructure relay protocols code a bit, to reduce bloatiness of the currently single file for them, more code re-use.~~ - Gonna keep this PR somewhat manageable without poking more at relay.. - [x] ~~Try to fix issue where with multiple clients, static stream content causes video to freeze until there's some movement.~~ - Was caused by server tuned profile being `throughput-performance`, causing CPU latency to be too high. - [x] Ponder the orb ### Second + third commit Redid the controller polling handling and fixed multi-controller handling in vimputti and nestri code sides. Remove some dead relay code as well to clean up the protocol source file, we'll revisit the meshing functionality later. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added software rendering option and MangoHud runtime config; controller sessions now support reconnection and batched state updates with persistent session IDs. * **Bug Fixes** * Restored previously-filtered NES-like gamepads so they connect correctly. * **Chores** * Modernized dependencies and protobuf tooling, migrated to protobuf-based messaging and streaming, and removed obsolete CUDA build steps. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: DatCaptainHorse <DatCaptainHorse@users.noreply.github.com>
45 lines
1.5 KiB
Rust
45 lines
1.5 KiB
Rust
use crate::input::controller::ControllerManager;
|
|
use crate::p2p::p2p::NestriConnection;
|
|
use gstreamer::glib;
|
|
use gstreamer::subclass::prelude::*;
|
|
use gstrswebrtc::signaller::Signallable;
|
|
use std::sync::Arc;
|
|
use tokio::sync::mpsc;
|
|
|
|
mod imp;
|
|
|
|
glib::wrapper! {
|
|
pub struct NestriSignaller(ObjectSubclass<imp::Signaller>) @implements Signallable;
|
|
}
|
|
|
|
impl NestriSignaller {
|
|
pub async fn new(
|
|
room: String,
|
|
nestri_conn: NestriConnection,
|
|
wayland_src: Arc<gstreamer::Element>,
|
|
controller_manager: Option<Arc<ControllerManager>>,
|
|
rumble_rx: Option<mpsc::Receiver<(u32, u16, u16, u16, String)>>,
|
|
attach_rx: Option<mpsc::Receiver<crate::proto::proto::ProtoControllerAttach>>,
|
|
) -> Result<Self, Box<dyn std::error::Error>> {
|
|
let obj: Self = glib::Object::new();
|
|
obj.imp().set_stream_room(room);
|
|
obj.imp().set_nestri_connection(nestri_conn).await?;
|
|
obj.imp().set_wayland_src(wayland_src);
|
|
if let Some(controller_manager) = controller_manager {
|
|
obj.imp().set_controller_manager(controller_manager);
|
|
}
|
|
if let Some(rumble_rx) = rumble_rx {
|
|
obj.imp().set_rumble_rx(rumble_rx).await;
|
|
}
|
|
if let Some(attach_rx) = attach_rx {
|
|
obj.imp().set_attach_rx(attach_rx).await;
|
|
}
|
|
Ok(obj)
|
|
}
|
|
}
|
|
impl Default for NestriSignaller {
|
|
fn default() -> Self {
|
|
panic!("Cannot create NestriSignaller without NestriConnection and WaylandSrc");
|
|
}
|
|
}
|