1
0
Fork 0
mirror of https://github.com/zigzap/zap.git synced 2025-10-20 23:24:09 +00:00

Merge pull request #80 from xflow-systems/zig-0.12.0

WebSockets: fix write function by replacing fio.str2fio with util.str2fio
This commit is contained in:
Rene Schallner 2024-04-21 13:59:59 +02:00 committed by GitHub
commit 74a3eb4dc2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 47 additions and 50 deletions

View file

@ -11,6 +11,7 @@ pub fn build(b: *std.Build) !void {
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
const optimize = b.standardOptimizeOption(.{}); const optimize = b.standardOptimizeOption(.{});
const use_openssl = b.option(bool, "openssl", "Use system-installed openssl for TLS support in zap") orelse blk: { const use_openssl = b.option(bool, "openssl", "Use system-installed openssl for TLS support in zap") orelse blk: {
// Alternatively, use an os env var to determine whether to build openssl support // Alternatively, use an os env var to determine whether to build openssl support
if (std.posix.getenv("ZAP_USE_OPENSSL")) |val| { if (std.posix.getenv("ZAP_USE_OPENSSL")) |val| {

View file

@ -5,17 +5,19 @@ const zap = @import("zap");
fn makeRequest(a: std.mem.Allocator, url: []const u8) !void { fn makeRequest(a: std.mem.Allocator, url: []const u8) !void {
const uri = try std.Uri.parse(url); const uri = try std.Uri.parse(url);
var h = std.http.Headers{ .allocator = a };
defer h.deinit();
var http_client: std.http.Client = .{ .allocator = a }; var http_client: std.http.Client = .{ .allocator = a };
defer http_client.deinit(); defer http_client.deinit();
var req = try http_client.open(.GET, uri, h, .{}); var server_header_buffer: [2048]u8 = undefined;
var req = try http_client.open(.GET, uri, .{
.server_header_buffer = &server_header_buffer,
.extra_headers = &.{
.{ .name = "cookie", .value = "ZIG_ZAP=awesome" },
},
});
defer req.deinit(); defer req.deinit();
try req.headers.append("cookie", "ZIG_ZAP=awesome"); try req.send();
try req.send(.{});
try req.wait(); try req.wait();
} }

View file

@ -5,16 +5,16 @@ const zap = @import("zap");
fn makeRequest(a: std.mem.Allocator, url: []const u8) !void { fn makeRequest(a: std.mem.Allocator, url: []const u8) !void {
const uri = try std.Uri.parse(url); const uri = try std.Uri.parse(url);
var h = std.http.Headers{ .allocator = a };
defer h.deinit();
var http_client: std.http.Client = .{ .allocator = a }; var http_client: std.http.Client = .{ .allocator = a };
defer http_client.deinit(); defer http_client.deinit();
var req = try http_client.open(.GET, uri, h, .{}); var server_header_buffer: [2048]u8 = undefined;
var req = try http_client.open(.GET, uri, .{
.server_header_buffer = &server_header_buffer,
});
defer req.deinit(); defer req.deinit();
try req.send(.{}); try req.send();
try req.wait(); try req.wait();
} }

View file

@ -82,6 +82,7 @@ pub fn EndpointHandler(comptime HandlerType: anytype, comptime ContextType: anyt
/// If `breakOnFinish` is `true`, the handler will stop handing requests down the chain if /// If `breakOnFinish` is `true`, the handler will stop handing requests down the chain if
/// the endpoint processed the request. /// the endpoint processed the request.
pub fn onRequest(handler: *HandlerType, r: zap.Request, context: *ContextType) bool { pub fn onRequest(handler: *HandlerType, r: zap.Request, context: *ContextType) bool {
const self: *Self = @fieldParentPtr("handler", handler); const self: *Self = @fieldParentPtr("handler", handler);
r.setUserContext(context); r.setUserContext(context);
self.endpoint.onRequest(r); self.endpoint.onRequest(r);

View file

@ -119,7 +119,7 @@ pub fn Handler(comptime ContextType: type) type {
pub inline fn write(handle: WsHandle, message: []const u8, is_text: bool) WebSocketError!void { pub inline fn write(handle: WsHandle, message: []const u8, is_text: bool) WebSocketError!void {
if (fio.websocket_write( if (fio.websocket_write(
handle, handle,
fio.str2fio(message), util.str2fio(message),
if (is_text) 1 else 0, if (is_text) 1 else 0,
) != 0) { ) != 0) {
return error.WriteError; return error.WriteError;

View file

@ -28,6 +28,7 @@ fn usage() void {
\\ instructions \\ instructions
; ;
std.debug.print("{s}", .{message}); std.debug.print("{s}", .{message});
std.process.exit(1); std.process.exit(1);
} }
@ -150,24 +151,26 @@ fn sendToDiscordPart(allocator: std.mem.Allocator, url: []const u8, message_json
// url // url
const uri = try std.Uri.parse(url); const uri = try std.Uri.parse(url);
// http headers
var h = std.http.Headers{ .allocator = allocator };
defer h.deinit();
try h.append("accept", "*/*");
try h.append("Content-Type", "application/json");
// client // client
var http_client: std.http.Client = .{ .allocator = allocator }; var http_client: std.http.Client = .{ .allocator = allocator };
defer http_client.deinit(); defer http_client.deinit();
var server_header_buffer: [2048]u8 = undefined;
// request // request
var req = try http_client.open(.POST, uri, h, .{}); var req = try http_client.open(.POST, uri, .{
.server_header_buffer = &server_header_buffer,
.extra_headers = &.{
.{ .name = "accept", .value = "*/*" },
.{ .name = "Content-Type", .value = "application/json" },
},
});
defer req.deinit(); defer req.deinit();
req.transfer_encoding = .chunked; req.transfer_encoding = .chunked;
// connect, send request // connect, send request
try req.send(.{}); try req.send();
// send POST payload // send POST payload
try req.writer().writeAll(message_json); try req.writer().writeAll(message_json);

View file

@ -1,43 +1,33 @@
const std = @import("std"); const std = @import("std");
pub fn main() !void { pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{ // var gpa = std.heap.GeneralPurposeAllocator(.{
.thread_safe = true, // .thread_safe = true,
}){}; // }){};
const allocator = gpa.allocator(); // const allocator = gpa.allocator();
var server = std.http.Server.init(.{
.reuse_address = true,
});
defer server.deinit();
const address = try std.net.Address.parseIp("127.0.0.1", 3000); const address = try std.net.Address.parseIp("127.0.0.1", 3000);
try server.listen(address); var http_server = try address.listen(.{
.reuse_address = true,
});
const max_header_size = 8192; var read_buffer: [2048]u8 = undefined;
// const max_header_size = 8192;
while (true) { while (true) {
var res = try server.accept(.{ const connection = try http_server.accept();
.allocator = allocator, defer connection.stream.close();
.header_strategy = .{ .dynamic = max_header_size }, var server = std.http.Server.init(connection, &read_buffer);
});
// const start_time = std.time.nanoTimestamp();
defer res.deinit();
defer _ = res.reset();
try res.wait();
var request = try server.receiveHead();
const server_body: []const u8 = "HI FROM ZIG STD!\n"; const server_body: []const u8 = "HI FROM ZIG STD!\n";
res.transfer_encoding = .{ .content_length = server_body.len };
try res.headers.append("content-type", "text/plain");
try res.headers.append("connection", "close");
try res.send();
var buf: [128]u8 = undefined; try request.respond(server_body, .{
_ = try res.readAll(&buf); .extra_headers = &.{
_ = try res.writer().writeAll(server_body); .{ .name = "content_type", .value = "text/plain" },
try res.finish(); .{ .name = "connection", .value = "close" },
// const end_time = std.time.nanoTimestamp(); },
// const diff = end_time - start_time; });
// std.debug.print("{d}\n", .{diff});
} }
} }