summaryrefslogtreecommitdiff
path: root/test/js/websockets_hello.ml
diff options
context:
space:
mode:
Diffstat (limited to 'test/js/websockets_hello.ml')
-rw-r--r--test/js/websockets_hello.ml28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/js/websockets_hello.ml b/test/js/websockets_hello.ml
new file mode 100644
index 0000000..5705dc9
--- /dev/null
+++ b/test/js/websockets_hello.ml
@@ -0,0 +1,28 @@
+open Lwt.Syntax
+open Js_of_ocaml
+
+(* https://stackoverflow.com/questions/34929382/what-are-the-differences-between-lwt-async-and-lwt-main-run-on-ocaml-node-js *)
+let rec run t =
+ let next_tick (_callback : unit -> unit) =
+ Js.Unsafe.(fun_call
+ (js_expr "process.nextTick")
+ [| inject (Js.wrap_callback _callback) |])
+ in Lwt.wakeup_paused ();
+ match Lwt.poll t with
+ | Some x -> x
+ | None ->
+ if Lwt.paused_count () > 0
+ then next_tick (fun () -> run t)
+ else ()
+
+let () =
+ run @@
+ let domain = "egregore.fun" in
+ let* stream, push =
+ Portal.connect domain in
+ push (Some (Portal.stanza_open domain));
+ push (Some Portal.stanza_close);
+ Lwt_stream.iter
+ (fun stanza ->
+ print_endline (">>> " ^ stanza))
+ stream