Zig 0.17.0-dev (Split by item)

This is an example of documentation generated by ZigDoc, an alternative to Zig's built-in Auto Doc feature. See also examples in other modes/formats. The project being documented here (as the example) is the Zig library itself.

recvWebSocketMessages

WebServer.recvWebSocketMessages
fn recvWebSocketMessages(ws: *WebServer, sock: *http.Server.WebSocket) void

File

lib/compiler/Maker/WebServer.zig:464

Code

fn recvWebSocketMessages(ws: *WebServer, sock: *http.Server.WebSocket) void {
    const graph = ws.graph;
    const io = graph.io;

    while (true) {
        const msg = sock.readSmallMessage() catch return;
        if (msg.opcode != .binary) continue;
        if (msg.data.len == 0) continue;
        const tag: abi.ToServerTag = @fromBackingInt(@intCast(msg.data[0]));
        switch (tag) {
            _ => continue,
            .rebuild => while (true) {
                ws.runner_request_mutex.lock(io) catch |err| switch (err) {
                    error.Canceled => return,
                };
                defer ws.runner_request_mutex.unlock(io);
                if (ws.runner_request == null) {
                    ws.runner_request = .rebuild;
                    ws.runner_request_ready_cond.signal(io);
                    break;
                }
                ws.runner_request_empty_cond.wait(io, &ws.runner_request_mutex) catch return;
            },
        }
    }
}