Skip to content

Commit 25fb2a8

Browse files
committed
Eliminate blob-arraybuffer conversion (causing NotReadableError in some cases)
1 parent 03486f1 commit 25fb2a8

3 files changed

Lines changed: 53 additions & 55 deletions

File tree

wsfs/src/idbfs-connector.ts

Lines changed: 51 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -19,60 +19,57 @@ Protocol notes:
1919

2020
export function connectFilesystem(ws: WebSocket, fs: IdbFs) {
2121
ws.addEventListener("message", (event) => {
22-
(event.data as Blob).arrayBuffer()
23-
.then((data) => {
24-
const packet = new PacketReader(new Uint8Array(data));
22+
const packet = new PacketReader(new Uint8Array(event.data));
2523

26-
// First byte dictates the function we're calling.
27-
const function_id = packet.u8();
28-
switch (function_id) {
29-
case constants.actions.internals: return;
30-
case constants.actions.init: return;
31-
case constants.actions.destroy: return;
32-
case constants.actions.lookup: return proc.lookup(fs, ws, packet);
33-
case constants.actions.forget: return;
34-
case constants.actions.batch_forget: return;
35-
case constants.actions.getattr: return proc.getattr(fs, ws, packet);
36-
case constants.actions.setattr: return proc.setattr(fs, ws, packet);
37-
case constants.actions.readlink: return proc.readlink(fs, ws, packet);
38-
case constants.actions.mknod: return proc.mknod(fs, ws, packet);
39-
case constants.actions.mkdir: return proc.mkdir(fs, ws, packet);
40-
case constants.actions.unlink: return proc.unlink(fs, ws, packet);
41-
case constants.actions.rmdir: return proc.rmdir(fs, ws, packet);
42-
case constants.actions.symlink: return proc.symlink(fs, ws, packet);
43-
case constants.actions.rename: return proc.rename(fs, ws, packet);
44-
case constants.actions.link: return proc.link(fs, ws, packet);
45-
case constants.actions.open: return proc.open(fs, ws, packet);
46-
case constants.actions.read: return proc.read(fs, ws, packet);
47-
case constants.actions.write: return proc.write(fs, ws, packet);
48-
case constants.actions.flush: return;
49-
case constants.actions.release: return proc.release(fs, ws, packet);
50-
case constants.actions.fsync: return;
51-
case constants.actions.opendir: return proc.opendir(fs, ws, packet);
52-
case constants.actions.readdir: return proc.readdir(fs, ws, packet);
53-
case constants.actions.readdirplus: return;
54-
case constants.actions.releasedir: return proc.releasedir(fs, ws, packet);
55-
case constants.actions.fsyncdir: return;
56-
case constants.actions.statfs: return proc.statfs(fs, ws, packet);
57-
case constants.actions.setxattr: return proc.setxattr(fs, ws, packet);
58-
case constants.actions.getxattr: return proc.getxattr(fs, ws, packet);
59-
case constants.actions.listxattr: return proc.listxattr(fs, ws, packet);
60-
case constants.actions.removexattr: return proc.removexattr(fs, ws, packet);
61-
case constants.actions.access: return;
62-
case constants.actions.create: return;
63-
case constants.actions.getlk: return;
64-
case constants.actions.setlk: return;
65-
case constants.actions.bmap: return;
66-
case constants.actions.ioctl: return;
67-
case constants.actions.poll: return;
68-
case constants.actions.fallocate: return;
69-
case constants.actions.lseek: return;
70-
case constants.actions.copy_file_range: return;
71-
case constants.actions.setvolname: return;
72-
case constants.actions.exchange: return;
73-
case constants.actions.getxtimes: return;
74-
default: console.error("Received invalid request", function_id);
75-
}
76-
});
24+
// First byte dictates the function we're calling.
25+
const function_id = packet.u8();
26+
switch (function_id) {
27+
case constants.actions.internals: return;
28+
case constants.actions.init: return;
29+
case constants.actions.destroy: return;
30+
case constants.actions.lookup: return proc.lookup(fs, ws, packet);
31+
case constants.actions.forget: return;
32+
case constants.actions.batch_forget: return;
33+
case constants.actions.getattr: return proc.getattr(fs, ws, packet);
34+
case constants.actions.setattr: return proc.setattr(fs, ws, packet);
35+
case constants.actions.readlink: return proc.readlink(fs, ws, packet);
36+
case constants.actions.mknod: return proc.mknod(fs, ws, packet);
37+
case constants.actions.mkdir: return proc.mkdir(fs, ws, packet);
38+
case constants.actions.unlink: return proc.unlink(fs, ws, packet);
39+
case constants.actions.rmdir: return proc.rmdir(fs, ws, packet);
40+
case constants.actions.symlink: return proc.symlink(fs, ws, packet);
41+
case constants.actions.rename: return proc.rename(fs, ws, packet);
42+
case constants.actions.link: return proc.link(fs, ws, packet);
43+
case constants.actions.open: return proc.open(fs, ws, packet);
44+
case constants.actions.read: return proc.read(fs, ws, packet);
45+
case constants.actions.write: return proc.write(fs, ws, packet);
46+
case constants.actions.flush: return;
47+
case constants.actions.release: return proc.release(fs, ws, packet);
48+
case constants.actions.fsync: return;
49+
case constants.actions.opendir: return proc.opendir(fs, ws, packet);
50+
case constants.actions.readdir: return proc.readdir(fs, ws, packet);
51+
case constants.actions.readdirplus: return;
52+
case constants.actions.releasedir: return proc.releasedir(fs, ws, packet);
53+
case constants.actions.fsyncdir: return;
54+
case constants.actions.statfs: return proc.statfs(fs, ws, packet);
55+
case constants.actions.setxattr: return proc.setxattr(fs, ws, packet);
56+
case constants.actions.getxattr: return proc.getxattr(fs, ws, packet);
57+
case constants.actions.listxattr: return proc.listxattr(fs, ws, packet);
58+
case constants.actions.removexattr: return proc.removexattr(fs, ws, packet);
59+
case constants.actions.access: return;
60+
case constants.actions.create: return;
61+
case constants.actions.getlk: return;
62+
case constants.actions.setlk: return;
63+
case constants.actions.bmap: return;
64+
case constants.actions.ioctl: return;
65+
case constants.actions.poll: return;
66+
case constants.actions.fallocate: return;
67+
case constants.actions.lseek: return;
68+
case constants.actions.copy_file_range: return;
69+
case constants.actions.setvolname: return;
70+
case constants.actions.exchange: return;
71+
case constants.actions.getxtimes: return;
72+
default: console.error("Received invalid request", function_id);
73+
};
7774
});
7875
}

wsfs/src/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ async function readDemo(fs: IdbFs) {
6363
wsButton.addEventListener("click", async () => {
6464
const ws = await new Promise<WebSocket>((res, rej) => {
6565
const ws = new WebSocket(`wss://${location.hash.replace(/^#/, "")}/fshost`);
66+
ws.binaryType = "arraybuffer";
6667
ws.addEventListener("open", () => res(ws));
6768
ws.addEventListener("error", () => rej());
6869
});

wsfs/src/wsfs-proto/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,4 @@ export const constants = {
6969
size: 0,
7070
data: 1,
7171
},
72-
};
72+
} as const;

0 commit comments

Comments
 (0)