summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2025-11-14 00:58:21 -0500
committerRobby Zambito <contact@robbyzambito.me>2025-11-18 13:25:01 -0500
commitc1c1fc51d65bcc53d84620002316ffcad785b4f2 (patch)
tree42e9305a5d3872a7fbee0e88aaf24cdbb1b0c77f
parent6e8d016f2f1de5f9de9858498bba1df08f30ba1a (diff)
Trying to pump data from nats client to stdout
-rw-r--r--src/main.zig49
1 files changed, 39 insertions, 10 deletions
diff --git a/src/main.zig b/src/main.zig
index 6e03226..7d0bfaf 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -97,11 +97,20 @@ fn serverMain(gpa: std.mem.Allocator, iter: *std.process.ArgIterator, main_args:
defer threaded.deinit();
const io = threaded.io();
+ // const info: ServerInfo = .{
+ // .server_id = "foo",
+ // .server_name = "bar",
+ // .version = "6.9.0",
+ // .max_payload = 6969,
+ // };
+
const info: ServerInfo = .{
- .server_id = "foo",
+ .server_id = "NBEK5DBBB4ZO5LTBGPXACZSB2QUTODC6GGN5NLOSPIGSRFWJID4XU52C",
.server_name = "bar",
- .version = "6.9.0",
- .max_payload = 6969,
+ .version = "2.11.8",
+ .go = "go1.24.6",
+ .headers = true,
+ .max_payload = 1048576,
};
var server = try std.Io.net.IpAddress.listen(.{
@@ -118,21 +127,41 @@ fn serverMain(gpa: std.mem.Allocator, iter: *std.process.ArgIterator, main_args:
const stream = try server.accept(io);
group.async(io, handleConnection, .{ io, stream, info });
}
-
- // var buffer: [1024]u8 = undefined;
- // var out_fs = std.fs.File.stderr().writer(&buffer);
- // const out = &out_fs.interface;
-
}
fn handleConnection(io: std.Io, stream: std.Io.net.Stream, info: ServerInfo) void {
defer stream.close(io);
- var buffer: [1024]u8 = undefined;
- var writer = stream.writer(io, &buffer);
+ var w_buffer: [1024]u8 = undefined;
+ var writer = stream.writer(io, &w_buffer);
const out = &writer.interface;
writeInfo(out, info) catch |err| {
std.debug.print("failed to write to client: {}\n", .{err});
};
+
+ var r_buffer: [1024]u8 = undefined;
+ var reader = stream.reader(io, &r_buffer);
+ const in = &reader.interface;
+
+ var stdout_buffer: [1024]u8 = undefined;
+ const stdout_file = std.fs.File.stdout();
+ var stdout_file_writer = stdout_file.writer(&stdout_buffer);
+ const stdout_writer = &stdout_file_writer.interface;
+
+ var timeout = io.async(std.Io.sleep, .{ io, .fromSeconds(1), .real });
+ defer timeout.cancel(io) catch {};
+
+ var user_res = io.async(std.Io.Reader.streamRemaining, .{ in, stdout_writer });
+ defer _ = user_res.cancel(io) catch {};
+
+ switch (io.select(.{
+ .timeout = &timeout,
+ .data = &user_res,
+ }) catch unreachable) {
+ .timeout => std.debug.print("timeout\n", .{}),
+ .data => |d| {
+ std.debug.print("received data {any}\n", .{d});
+ },
+ }
}
fn writeInfo(out: *std.Io.Writer, info: ServerInfo) !void {