Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T03:59:08.913Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

stream.rs

87 lines · 1.9 KB · rust
1use std::{
2    io::{Read, Result, Write},
3    os::windows::io::{AsSocket, BorrowedSocket},
4    path::Path,
5    sync::Arc,
6};
7
8use async_io::IoSafe;
9use windows::Win32::Networking::WinSock::connect;
10
11use crate::{
12    socket::UnixSocket,
13    util::{init, map_ret, sockaddr_un},
14};
15
16pub struct UnixStream(Arc<UnixSocket>);
17
18unsafe impl IoSafe for UnixStream {}
19
20impl UnixStream {
21    pub fn new(socket: UnixSocket) -> Self {
22        Self(Arc::new(socket))
23    }
24
25    pub fn connect<P: AsRef<Path>>(path: P) -> Result<Self> {
26        init();
27        unsafe {
28            let inner = UnixSocket::new()?;
29            let (addr, len) = sockaddr_un(path)?;
30
31            map_ret(connect(
32                inner.as_raw(),
33                &addr as *const _ as *const _,
34                len as i32,
35            ))?;
36            Ok(Self(Arc::new(inner)))
37        }
38    }
39
40    pub fn into_split(self) -> (OwnedReadHalf, OwnedWriteHalf) {
41        let inner = self.0;
42        (OwnedReadHalf(inner.clone()), OwnedWriteHalf(inner))
43    }
44}
45
46impl Read for UnixStream {
47    fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
48        self.0.recv(buf)
49    }
50}
51
52impl Write for UnixStream {
53    fn write(&mut self, buf: &[u8]) -> Result<usize> {
54        self.0.send(buf)
55    }
56
57    fn flush(&mut self) -> Result<()> {
58        Ok(())
59    }
60}
61
62impl AsSocket for UnixStream {
63    fn as_socket(&self) -> BorrowedSocket<'_> {
64        unsafe { BorrowedSocket::borrow_raw(self.0.as_raw().0 as _) }
65    }
66}
67
68pub struct OwnedReadHalf(Arc<UnixSocket>);
69
70impl Read for OwnedReadHalf {
71    fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
72        self.0.recv(buf)
73    }
74}
75
76pub struct OwnedWriteHalf(Arc<UnixSocket>);
77
78impl Write for OwnedWriteHalf {
79    fn write(&mut self, buf: &[u8]) -> Result<usize> {
80        self.0.send(buf)
81    }
82
83    fn flush(&mut self) -> Result<()> {
84        Ok(())
85    }
86}
87
Served at tenant.openagents/omega Member data and write actions are omitted.