srctree

Andrew Kelley parent 0ea76022 76049b00
getting the Db to the client intact

client/main.zig added: 30, removed: 11, total 19
@@ -2,6 +2,8 @@ const std = @import("std");
const log = std.log;
const assert = std.debug.assert;
const gpa = std.heap.wasm_allocator;
const protocol = @import("shared").protocol;
const Db = @import("shared").Db;
 
const js = struct {
extern "js" fn log(ptr: [*]const u8, len: usize) void;
@@ -36,7 +38,7 @@ fn logFn(
js.log(line.ptr, line.len);
}
 
var message_buffer: std.ArrayListUnmanaged(u8) = .{};
var message_buffer: std.ArrayListAlignedUnmanaged(u8, @alignOf(u32)) = .{};
 
/// Resizes the message buffer to be the correct length; returns the pointer to
/// the query string.
@@ -46,5 +48,6 @@ export fn message_begin(len: usize) [*]u8 {
}
 
export fn message_end() void {
log.debug("got message: {s}", .{message_buffer.items});
const header: protocol.Header = @bitCast(message_buffer.items[0..@sizeOf(protocol.Header)].*);
log.debug("got message: {any}", .{header});
}
 
server/main.zig added: 30, removed: 11, total 19
@@ -202,8 +202,16 @@ pub const Server = struct {
const directories = std.mem.sliceAsBytes(s.db.directories.items);
const albums = std.mem.sliceAsBytes(s.db.albums.keys());
const string_bytes = s.db.string_bytes.items;
const Header = @import("shared").protocol.Header;
const header: Header = .{
.files_len = @intCast(s.db.files.items.len),
.directories_len = @intCast(s.db.directories.items.len),
.albums_len = @intCast(s.db.albums.entries.len),
.string_bytes_len = @intCast(s.db.string_bytes.items.len),
};
 
const iovecs = [_]std.posix.iovec_const{
.{ .iov_base = std.mem.asBytes(&header), .iov_len = @sizeOf(Header) },
.{ .iov_base = files.ptr, .iov_len = files.len },
.{ .iov_base = directories.ptr, .iov_len = directories.len },
.{ .iov_base = albums.ptr, .iov_len = albums.len },
 
filename was Deleted added: 30, removed: 11, total 19
@@ -0,0 +1,6 @@
pub const Header = extern struct {
files_len: u32,
directories_len: u32,
albums_len: u32,
string_bytes_len: u32,
};
 
shared/root.zig added: 30, removed: 11, total 19
@@ -1 +1,2 @@
pub const Db = @import("Db.zig");
pub const protocol = @import("protocol.zig");
 
www/main.js added: 30, removed: 11, total 19
@@ -33,6 +33,7 @@
const wsProto = isHttps ? "wss:" : "ws:";
const wsUrl = wsProto + '//' + hostName + ':' + port + pathname;
ws = new WebSocket(wsUrl);
ws.binaryType = "arraybuffer";
ws.addEventListener('message', onWebSocketMessage, false);
ws.addEventListener('error', timeoutThenCreateNew, false);
ws.addEventListener('close', timeoutThenCreateNew, false);
@@ -61,10 +62,10 @@
}
 
function wasmOnMessage(data) {
const len = data.size;
const ptr = wasm_exports.message_begin(len);
const wasmArray = new Uint8Array(wasm_exports.memory.buffer, ptr, len);
wasmArray.set(data);
const jsArray = new Uint8Array(data);
const ptr = wasm_exports.message_begin(jsArray.length);
const wasmArray = new Uint8Array(wasm_exports.memory.buffer, ptr, jsArray.length);
wasmArray.set(jsArray);
wasm_exports.message_end();
}