Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 14 additions & 12 deletions examples/example_stdlib.zig
Original file line number Diff line number Diff line change
Expand Up @@ -183,9 +183,9 @@ fn respondJson(arena: std.mem.Allocator, request: *std.http.Server.Request, valu
},
},
});
defer body.end() catch {};
const jf = std.json.fmt(value, .{});
try jf.format(&body.writer);
try body.end();
}

// ----- Handlers -----
Expand Down Expand Up @@ -316,9 +316,8 @@ fn executeScript(arena: std.mem.Allocator, request: *std.http.Server.Request, sa

// ----- Long-lived streaming SSE -----

fn beginStream(request: *std.http.Server.Request) !std.http.BodyWriter {
var buf: [4096]u8 = undefined;
var body = try request.respondStreaming(&buf, .{
fn beginStream(buffer: []u8, request: *std.http.Server.Request) !std.http.BodyWriter {
var body = try request.respondStreaming(buffer, .{
.respond_options = .{
.extra_headers = &.{
.{ .name = "content-type", .value = "text/event-stream; charset=UTF-8" },
Expand All @@ -333,8 +332,8 @@ fn beginStream(request: *std.http.Server.Request) !std.http.BodyWriter {
fn svgMorph(arena: std.mem.Allocator, request: *std.http.Server.Request) !void {
const opt = try datastar.readSignals(struct { svgMorph: usize = 1 }, arena, request);

var body = try beginStream(request);
defer body.end() catch {};
var body_buffer: [4096]u8 = undefined;
var body = try beginStream(&body_buffer, request);

var frame_buf: [4096]u8 = undefined;
var fba: std.heap.FixedBufferAllocator = .init(&frame_buf);
Expand All @@ -359,6 +358,8 @@ fn svgMorph(arena: std.mem.Allocator, request: *std.http.Server.Request) !void {
});
try shared_io.sleep(.fromMilliseconds(100), .real);
}

try body.end();
}

fn emitSvgFrame(body: *std.http.BodyWriter, fba: *std.heap.FixedBufferAllocator, comptime fmt: []const u8, args: anytype) !void {
Expand Down Expand Up @@ -391,8 +392,8 @@ fn mathMorph(arena: std.mem.Allocator, request: *std.http.Server.Request) !void
return;
}

var stream = try beginStream(request);
defer stream.end() catch {};
var stream_buffer: [4096]u8 = undefined;
var stream = try beginStream(&stream_buffer, request);

var frame_buf: [4096]u8 = undefined;
var fba: std.heap.FixedBufferAllocator = .init(&frame_buf);
Expand All @@ -417,8 +418,7 @@ fn mathMorph(arena: std.mem.Allocator, request: *std.http.Server.Request) !void
fba.reset();
const reset_block = try datastar.patchSignals(fba.allocator(), .{ .mathmlMorph = 1 }, .{});
try stream.writer.writeAll(reset_block);
try stream.writer.flush();
try stream.flush();
try stream.end();
}

const snippets = [_][]const u8{
Expand Down Expand Up @@ -469,8 +469,8 @@ fn mimeTest(arena: std.mem.Allocator, request: *std.http.Server.Request, filenam
}

fn hotreload(request: *std.http.Server.Request, id: u64) !void {
var stream = try beginStream(request);
defer stream.end() catch {};
var stream_buffer: [4096]u8 = undefined;
var stream = try beginStream(&stream_buffer, request);

var frame_buf: [1024]u8 = undefined;
var fba: std.heap.FixedBufferAllocator = .init(&frame_buf);
Expand Down Expand Up @@ -498,4 +498,6 @@ fn hotreload(request: *std.http.Server.Request, id: u64) !void {
try stream.writer.flush();
try stream.flush();
}

try stream.end();
}
2 changes: 1 addition & 1 deletion hello_world/main.zig
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@ fn streamHello(io: Io, arena: std.mem.Allocator, request: *std.http.Server.Reque
},
},
});
defer body.end() catch {};
try body.flush(); // push headers to the wire before first SSE event

for (0..MESSAGE.len) |i| {
Expand All @@ -118,4 +117,5 @@ fn streamHello(io: Io, arena: std.mem.Allocator, request: *std.http.Server.Reque
}
}
std.debug.print("\n", .{});
try body.end();
}