@@ -7,10 +7,9 @@ const RecvError = public.IO.RecvError;
77const SendError = public .IO .SendError ;
88const TimeoutError = public .IO .TimeoutError ;
99
10- const Window = @import ("html/window .zig" ).Window ;
10+ const Browser = @import ("browser/browser .zig" ).Browser ;
1111
1212const cdp = @import ("cdp/cdp.zig" );
13- pub var socket_fd : std.os.socket_t = undefined ;
1413
1514const NoError = error {NoError };
1615const Error = AcceptError || RecvError || SendError || TimeoutError || cdp .Error || NoError ;
@@ -29,19 +28,25 @@ pub const Cmd = struct {
2928 state : cdp.State = .{},
3029
3130 // JS fields
32- js_env : * public.Env ,
33- try_catch : public.TryCatch ,
31+ browser : * Browser , // TODO: is pointer mandatory here?
32+ // try_catch: public.TryCatch, // TODO
3433
3534 fn cbk (self : * Cmd , completion : * Completion , result : RecvError ! usize ) void {
3635 const size = result catch | err | {
3736 self .err = err ;
3837 return ;
3938 };
4039
40+ if (size == 0 ) {
41+ // continue receving incomming messages asynchronously
42+ self .loop ().io .recv (* Cmd , self , cbk , completion , self .socket , self .buf );
43+ return ;
44+ }
45+
4146 // input
4247 var input = self .buf [0.. size ];
4348 if (std .log .defaultLogEnabled (.debug )) {
44- std .debug .print ("\n input { s}\n " , .{input });
49+ std .debug .print ("\n input size: {d}, content: { s}\n " , .{ size , input });
4550 }
4651
4752 // close on exit command
@@ -86,11 +91,13 @@ pub const Cmd = struct {
8691
8792 // shortcuts
8893 fn alloc (self : * Cmd ) std.mem.Allocator {
89- return self .js_env .nat_ctx .alloc ;
94+ // TODO: should we return the allocator from the page instead?
95+ return self .browser .currentSession ().alloc ;
9096 }
9197
92- fn loop (self : * Cmd ) * public.Loop {
93- return self .js_env .nat_ctx .loop ;
98+ fn loop (self : * Cmd ) public.Loop {
99+ // TODO: pointer instead?
100+ return self .browser .currentSession ().loop ;
94101 }
95102};
96103
@@ -179,58 +186,41 @@ const Accept = struct {
179186 }
180187};
181188
182- pub fn execJS (alloc : std.mem.Allocator , js_env : * public.Env ) anyerror ! void {
183-
184- // start JS env
185- try js_env .start (alloc );
186- defer js_env .stop ();
189+ // Listen
190+ // ------
187191
188- // alias global as self
189- try js_env .attachObject (try js_env .getGlobal (), "self" , null );
190-
191- // alias global as self and window
192- const window = Window .create (null );
193- // window.replaceDocument(doc); TODO
194- try js_env .bindGlobal (window );
195-
196- // add console object
197- const console = public.Console {};
198- try js_env .addObject (console , "console" );
199-
200- // JS try cache
201- var try_catch = public .TryCatch .init (js_env .* );
202- defer try_catch .deinit ();
192+ pub fn listen (browser : * Browser , socket : std.os.socket_t ) anyerror ! void {
203193
204194 // create I/O contexts and callbacks
205195 // for accepting connections and receving messages
206196 var input : [1024 ]u8 = undefined ;
207197 var cmd = Cmd {
208- .js_env = js_env ,
198+ .browser = browser ,
209199 .socket = undefined ,
210200 .buf = & input ,
211- .try_catch = try_catch ,
212201 };
213202 var accept = Accept {
214203 .cmd = & cmd ,
215- .socket = socket_fd ,
204+ .socket = socket ,
216205 };
217206
218207 // accepting connection asynchronously on internal server
219- const loop = js_env . nat_ctx .loop ;
208+ const loop = browser . currentSession () .loop ;
220209 var completion : Completion = undefined ;
221- loop .io .accept (* Accept , & accept , Accept .cbk , & completion , socket_fd );
210+ loop .io .accept (* Accept , & accept , Accept .cbk , & completion , socket );
222211
223212 // infinite loop on I/O events, either:
224213 // - cmd from incoming connection on server socket
225214 // - JS callbacks events from scripts
226215 while (true ) {
227216 try loop .io .tick ();
228217 if (loop .cbk_error ) {
229- if (try try_catch .exception (alloc , js_env .* )) | msg | {
230- std .debug .print ("\n \r Uncaught {s}\n \r " , .{msg });
231- alloc .free (msg );
232- }
233- loop .cbk_error = false ;
218+ std .log .err ("JS error" , .{});
219+ // if (try try_catch.exception(alloc, js_env.*)) |msg| {
220+ // std.debug.print("\n\rUncaught {s}\n\r", .{msg});
221+ // alloc.free(msg);
222+ // }
223+ // loop.cbk_error = false;
234224 }
235225 if (cmd .err ) | err | {
236226 if (err != error .NoError ) std .log .err ("Server error: {any}" , .{err });
0 commit comments