@@ -12,7 +12,8 @@ const Browser = @import("browser/browser.zig").Browser;
1212const cdp = @import ("cdp/cdp.zig" );
1313
1414const 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