open Brr open Brr_io open Shared let ws = Format.printf "create websocket@\n"; let ws_url = let location = Window.location G.window in let host = Uri.host location |> Jstr.to_string in let port = Option.fold ~none:"" ~some:(fun port -> Format.sprintf ":%d" port) (Uri.port location) in Jstr.of_string @@ Format.sprintf "ws://%s%s/island/ws" host port in Websocket.create ws_url let ws_target = Websocket.as_target ws let on_event ws_event log_msg f = let (_ : Ev.listener) = Ev.listen ws_event (fun ev -> Format.printf "%s@\n" log_msg; f ev ) ws_target in () let to_server_msg ev = Format.printf "to_server_msg@."; let data = Message.Ev.data (Ev.as_type ev) |> Jstr.to_string in let server_msg : Network.server_message = Network.unmarshal data in Format.printf "un-marshaled message from server yay ~ @\n"; server_msg let on_update_state_message f = on_event Message.Ev.message "Websocket reveived message!" (fun ev -> f (to_server_msg ev) ) let send (msg : Network.client_message) = Format.printf "send msg on websocket ~~ @\n"; let s = Jstr.of_string (Network.marshal msg) in Websocket.send_string ws s; Format.printf "send action on websocket ~~ DONE @\n"; ()