Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T05:01:54.422Z 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

net.rs

108 lines · 3.4 KB · rust
1pub mod async_net;
2#[cfg(target_os = "windows")]
3pub mod listener;
4#[cfg(target_os = "windows")]
5pub mod socket;
6#[cfg(target_os = "windows")]
7pub mod stream;
8#[cfg(target_os = "windows")]
9mod util;
10
11#[cfg(target_os = "windows")]
12pub use listener::*;
13#[cfg(target_os = "windows")]
14pub use socket::*;
15#[cfg(not(target_os = "windows"))]
16pub use std::os::unix::net::{UnixListener, UnixStream};
17#[cfg(target_os = "windows")]
18pub use stream::*;
19
20#[cfg(test)]
21mod tests {
22    use std::io::{Read, Write};
23
24    use smol::io::{AsyncReadExt, AsyncWriteExt};
25
26    const SERVER_MESSAGE: &str = "Connection closed";
27    const CLIENT_MESSAGE: &str = "Hello, server!";
28    const BUFFER_SIZE: usize = 32;
29
30    #[test]
31    fn test_windows_listener() -> std::io::Result<()> {
32        use crate::{UnixListener, UnixStream};
33
34        let temp = tempfile::tempdir()?;
35        let socket = temp.path().join("socket.sock");
36        let listener = UnixListener::bind(&socket)?;
37
38        // Server
39        let server = std::thread::spawn(move || {
40            let (mut stream, _) = listener.accept().unwrap();
41
42            // Read data from the client
43            let mut buffer = [0; BUFFER_SIZE];
44            let bytes_read = stream.read(&mut buffer).unwrap();
45            let string = String::from_utf8_lossy(&buffer[..bytes_read]);
46            assert_eq!(string, CLIENT_MESSAGE);
47
48            // Send a message back to the client
49            stream.write_all(SERVER_MESSAGE.as_bytes()).unwrap();
50        });
51
52        // Client
53        let mut client = UnixStream::connect(&socket)?;
54
55        // Send data to the server
56        client.write_all(CLIENT_MESSAGE.as_bytes())?;
57        let mut buffer = [0; BUFFER_SIZE];
58
59        // Read the response from the server
60        let bytes_read = client.read(&mut buffer)?;
61        let string = String::from_utf8_lossy(&buffer[..bytes_read]);
62        assert_eq!(string, SERVER_MESSAGE);
63        client.flush()?;
64
65        server.join().unwrap();
66        Ok(())
67    }
68
69    #[test]
70    fn test_unix_listener() -> std::io::Result<()> {
71        use crate::async_net::{UnixListener, UnixStream};
72
73        smol::block_on(async {
74            let temp = tempfile::tempdir()?;
75            let socket = temp.path().join("socket.sock");
76            let listener = UnixListener::bind(&socket)?;
77
78            // Server
79            let server = smol::spawn(async move {
80                let (mut stream, _) = listener.accept().await.unwrap();
81
82                // Read data from the client
83                let mut buffer = [0; BUFFER_SIZE];
84                let bytes_read = stream.read(&mut buffer).await.unwrap();
85                let string = String::from_utf8_lossy(&buffer[..bytes_read]);
86                assert_eq!(string, CLIENT_MESSAGE);
87
88                // Send a message back to the client
89                stream.write_all(SERVER_MESSAGE.as_bytes()).await.unwrap();
90            });
91
92            // Client
93            let mut client = UnixStream::connect(&socket).await?;
94            client.write_all(CLIENT_MESSAGE.as_bytes()).await?;
95
96            // Read the response from the server
97            let mut buffer = [0; BUFFER_SIZE];
98            let bytes_read = client.read(&mut buffer).await?;
99            let string = String::from_utf8_lossy(&buffer[..bytes_read]);
100            assert_eq!(string, "Connection closed");
101            client.flush().await?;
102
103            server.await;
104            Ok(())
105        })
106    }
107}
108
Served at tenant.openagents/omega Member data and write actions are omitted.