Skip to content

Commit 96906df

Browse files
Implement own protocol to handle msg size
Signed-off-by: Francis Bouvier <[email protected]>
1 parent 3396c70 commit 96906df

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

src/server.zig

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ const Browser = @import("browser/browser.zig").Browser;
1212
const cdp = @import("cdp/cdp.zig");
1313

1414
const NoError = error{NoError};
15-
const Error = AcceptError || RecvError || SendError || TimeoutError || cdp.Error || NoError;
15+
const IOError = AcceptError || RecvError || SendError || TimeoutError;
16+
const Error = IOError || std.fmt.ParseIntError || cdp.Error || NoError;
1617

1718
// I/O Recv
1819
// --------
@@ -56,16 +57,35 @@ pub const Cmd = struct {
5657
}
5758

5859
// cmds
59-
var cmd: []const u8 = undefined;
6060
while (true) {
6161

62+
// parse json msg size
63+
const size_pos = std.mem.indexOfScalar(u8, input, ':').?;
64+
std.log.debug("msg size pos: {d}", .{size_pos});
65+
const size_str = input[0..size_pos];
66+
input = input[size_pos + 1 ..];
67+
const size_msg = std.fmt.parseInt(u32, size_str, 10) catch |err| {
68+
self.err = err;
69+
return;
70+
};
71+
std.log.debug("msg size: {d}", .{size_msg});
72+
73+
// part
74+
const is_part = input.len < size_msg;
75+
std.log.debug("is_part: {any}", .{is_part});
76+
if (is_part) {
77+
std.log.debug("size_msg {d}, input {d}", .{ size_msg, input.len });
78+
@panic("part msg"); // TODO: implement part
79+
}
80+
6281
// handle several JSON msg in 1 read
63-
const pos = std.mem.indexOf(u8, input, "}{");
64-
if (pos) |p| {
65-
cmd = input[0 .. p + 1];
66-
input = input[p + 1 ..];
67-
} else {
68-
cmd = input;
82+
const is_multi = input.len > size_msg;
83+
std.log.debug("is_multi: {any}", .{is_multi});
84+
const cmd = input[0..size_msg];
85+
std.log.debug("cmd: {s}", .{cmd});
86+
if (is_multi) {
87+
input = input[size_msg..];
88+
std.log.debug("rest: {s}", .{input});
6989
}
7090

7191
// cdp
@@ -83,7 +103,7 @@ pub const Cmd = struct {
83103
sendAsync(self, res) catch unreachable;
84104
}
85105

86-
if (pos == null) break;
106+
if (!is_multi) break;
87107

88108
// TODO: handle 1 read smaller than a complete JSON msg
89109
}

0 commit comments

Comments
 (0)