Trying to pump data from nats client to stdout

This commit is contained in:
2025-11-14 00:58:21 -05:00
parent 6e8d016f2f
commit c1c1fc51d6

View File

@@ -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 {