DoxigAlpha

writeMessageVecUnflushed

Function parameters

Parameters

#
ws:*WebSocket
data:[][]const u8

Type definitions in this namespace

Types

#
WebSocket
See https://tools.ietf.org/html/rfc6455

Initialize an HTTP server that can respond to multiple requests on the same

Functions

#
init
Initialize an HTTP server that can respond to multiple requests on the same

Error sets in this namespace

Error Sets

#

Source

Implementation

#
pub fn writeMessageVecUnflushed(ws: *WebSocket, data: [][]const u8, op: Opcode) Writer.Error!void {
    const total_len = l: {
        var total_len: u64 = 0;
        for (data) |iovec| total_len += iovec.len;
        break :l total_len;
    };
    const out = ws.output;
    try out.writeByte(@bitCast(@as(Header0, .{
        .opcode = op,
        .fin = true,
    })));
    switch (total_len) {
        0...125 => try out.writeByte(@bitCast(@as(Header1, .{
            .payload_len = @enumFromInt(total_len),
            .mask = false,
        }))),
        126...0xffff => {
            try out.writeByte(@bitCast(@as(Header1, .{
                .payload_len = .len16,
                .mask = false,
            })));
            try out.writeInt(u16, @intCast(total_len), .big);
        },
        else => {
            try out.writeByte(@bitCast(@as(Header1, .{
                .payload_len = .len64,
                .mask = false,
            })));
            try out.writeInt(u64, total_len, .big);
        },
    }
    try out.writeVecAll(data);
}