package bonsai
A library for building dynamic webapps, using Js_of_ocaml
Install
Dune Dependency
Authors
Maintainers
Sources
bonsai-v0.16.0.tar.gz
sha256=1d68aab713659951eba5b85f21d6f9382e0efa8579a02c3be65d9071c6e86303
doc/src/bonsai.example_chat_open_source_native/bonsai_chat_open_source_native.ml.html
Source file bonsai_chat_open_source_native.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
open! Core open! Async let initialize_connection _initiated_from _addr _inet connection = { User_state.user = "sample-username"; connection } ;; let respond_string ~content_type ?flush ?headers ?status s = let headers = Cohttp.Header.add_opt headers "Content-Type" content_type in Cohttp_async.Server.respond_string ?flush ~headers ?status s ;; let not_found_html = {| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>404 Not Found</title> </head> <body> <h1>404 Not Found</h1> </body> </html> |} ;; let html = {| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script defer src="main.js"></script> <link rel="stylesheet" type="text/css" href="style.css"> <title> RPC-Chat </title> </head> <body> <div id="app"></div> </body> </html> |} ;; let handler ~body:_ _inet req = let path = Uri.path (Cohttp.Request.uri req) in match path with | "" | "/" | "/index.html" -> respond_string ~content_type:"text/html" html | "/main.js" -> respond_string ~content_type:"application/javascript" Embedded_files.main_dot_bc_dot_js | "/style.css" -> respond_string ~content_type:"text/css" Embedded_files.style_dot_css | _ -> respond_string ~content_type:"text/html" ~status:`Not_found not_found_html ;; let main ~port = let global_state = Global_state.create () in let hostname = Unix.gethostname () in printf "Serving http://%s:%d/\n%!" hostname port; let%bind server = let http_handler () = handler in Rpc_websocket.Rpc.serve ~on_handler_error:`Ignore ~mode:`TCP ~where_to_listen:(Tcp.Where_to_listen.of_port port) ~http_handler ~implementations:(Rpc_implementations.implementations global_state) ~initial_connection_state:initialize_connection () in Cohttp_async.Server.close_finished server ;; let command = Command.async ~summary:"Start server for rpc-chat" (let%map_open.Command port = flag "port" (optional_with_default 8080 int) ~doc:"port on which to serve" in fun () -> main ~port) ~behave_nicely_in_pipeline:false ;;
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>