Source
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);
}