cleanup client
This commit is contained in:
parent
51af8d2f14
commit
0024f49df9
4 changed files with 15 additions and 7 deletions
|
@ -12,4 +12,4 @@ This repository contains:
|
||||||
|
|
||||||
- The agent. Written in C++20.
|
- The agent. Written in C++20.
|
||||||
- Shared headers and utility code, used between the agent and the client. Written in C++20, mostly so it can be shared between the agent and client.
|
- Shared headers and utility code, used between the agent and the client. Written in C++20, mostly so it can be shared between the agent and client.
|
||||||
- A simple client, written mostly in Rust (with some C++ glue), which displays the framebuffer (in a quick-and-dirty fashion.). Mostly test-only code. Some of it isn't though!
|
- A simple client, written mostly in Rust (with some C++ glue since I don't feel like rewriting structures and the shared code in Rust), which displays the framebuffer (in a quick-and-dirty fashion.). Mostly test-only code. Some of it isn't though, and will be turned into a standalone client crate.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//! Hazelnut C++ client bindings.
|
//! Hazelnut C++ client bindings.
|
||||||
use nix::{fcntl::OFlag, sys::stat::Mode};
|
use nix::{fcntl::OFlag, sys::stat::Mode, NixPath};
|
||||||
|
|
||||||
pub(crate) mod sys {
|
pub(crate) mod sys {
|
||||||
use std::ffi;
|
use std::ffi;
|
||||||
|
@ -13,6 +13,9 @@ pub(crate) mod sys {
|
||||||
/// The frame has been changed.
|
/// The frame has been changed.
|
||||||
Changed,
|
Changed,
|
||||||
|
|
||||||
|
/// The Hazelnut lock was contended, so we couldn't lock it ourselves.
|
||||||
|
LockContended,
|
||||||
|
|
||||||
/// A failure occured during the tick.
|
/// A failure occured during the tick.
|
||||||
Fail,
|
Fail,
|
||||||
}
|
}
|
||||||
|
@ -59,9 +62,9 @@ impl HazelnutClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Opens the given IVSHMEM shmem file.
|
/// Opens the given IVSHMEM shmem file.
|
||||||
pub fn open(&mut self, path: &String) -> anyhow::Result<()> {
|
pub fn open<P: ?Sized + NixPath>(&mut self, path: &P) -> anyhow::Result<()> {
|
||||||
// NOTE: `fd` is owned by the hazelnut client once it is provided to it, so we do not close it ourselves.
|
// NOTE: `fd` is owned by the hazelnut client once it is provided to it, so we do not close it ourselves.
|
||||||
let fd = nix::fcntl::open(path.as_str(), OFlag::O_RDWR, Mode::S_IRUSR | Mode::S_IWUSR)?;
|
let fd = nix::fcntl::open(path, OFlag::O_RDWR, Mode::S_IRUSR | Mode::S_IWUSR)?;
|
||||||
|
|
||||||
// FIXME: this really should work by FD so we can just return io::Result<> or something, but bleh
|
// FIXME: this really should work by FD so we can just return io::Result<> or something, but bleh
|
||||||
// for now it's "fine", also it's a path in the shared sources currently.
|
// for now it's "fine", also it's a path in the shared sources currently.
|
||||||
|
|
|
@ -11,7 +11,7 @@ fn main() -> anyhow::Result<()> {
|
||||||
|
|
||||||
let socket_path: String = "/dev/shm/lg-win7".into();
|
let socket_path: String = "/dev/shm/lg-win7".into();
|
||||||
|
|
||||||
client.open(&socket_path)?;
|
client.open(&socket_path[..])?;
|
||||||
|
|
||||||
println!("Opened IVSHMEM device.");
|
println!("Opened IVSHMEM device.");
|
||||||
|
|
||||||
|
@ -56,7 +56,12 @@ fn main() -> anyhow::Result<()> {
|
||||||
.expect("Failed to update");
|
.expect("Failed to update");
|
||||||
|
|
||||||
client.unlock();
|
client.unlock();
|
||||||
|
},
|
||||||
|
|
||||||
|
hzclient::sys::ResultCode::LockContended => {
|
||||||
|
// contended
|
||||||
}
|
}
|
||||||
|
|
||||||
hzclient::ResultCode::Unchanged => match window.as_mut() {
|
hzclient::ResultCode::Unchanged => match window.as_mut() {
|
||||||
Some(window) => {
|
Some(window) => {
|
||||||
client.unlock();
|
client.unlock();
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#include "ivshmem_protocol.hpp"
|
#include "ivshmem_protocol.hpp"
|
||||||
#include "Utils.hpp"
|
#include "Utils.hpp"
|
||||||
|
|
||||||
enum class ResultCode : u32 { Unchanged, Changed, Fail };
|
enum class ResultCode : u32 { Unchanged, Changed, LockContended, Fail };
|
||||||
|
|
||||||
struct HazelnutIvshmemClient {
|
struct HazelnutIvshmemClient {
|
||||||
bool Open(int fd) {
|
bool Open(int fd) {
|
||||||
|
@ -29,7 +29,7 @@ struct HazelnutIvshmemClient {
|
||||||
|
|
||||||
if(pHeader->lock.try_lock_manually()) {
|
if(pHeader->lock.try_lock_manually()) {
|
||||||
// failed to lock
|
// failed to lock
|
||||||
return ResultCode::Unchanged;
|
return ResultCode::LockContended;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto current = pFrameHeader->serial.load();
|
auto current = pFrameHeader->serial.load();
|
||||||
|
|
Loading…
Reference in a new issue