core hello world /

open Core.Std
open Async.Std

let port_arg () =
    flag "-port" (optional_with_default 8080 int)
      ~doc:" Broker's port"

let host_arg () =
    flag "-hostname" (optional_with_default "" string)
      ~doc:" Broker's hostname"

let with_rpc_conn f ~host ~port = "starting RPC connection to %s:%d" host port;
    (Tcp.to_host_and_port host port)
    ~timeout:(sec 1.)
    (fun r w -> "Connection established";
      Rpc.Connection.create r w ~connection_state:()
      >>= function
      | Error exn -> "Received error";
        raise exn
      | Ok conn -> "Calling handling function";
        f conn

let start_server ~env ?(stop=Deferred.never ()) ~implementations ~port () = "starting server on %d" port;
  let implementations =
    Rpc.Implementations.create ~on_unknown_rpc:`Ignore ~implementations
  match implementations with
  | Error (`Duplicate_implementations _) -> assert false
  | Ok implementations -> "About to start TCP server";
      ~on_handler_error:(`Call (fun _ exn -> Log.Global.sexp exn Exn.sexp_of_t))
      (Tcp.on_port port)
      (fun _addr r w ->
        Rpc.Connection.server_with_close r w
            `Call (fun exn -> Log.Global.sexp exn Exn.sexp_of_t; return ()))
    >>= fun server -> "TCP server started, waiting for close";
      [ (stop >>= fun () -> Tcp.Server.close server)
      ; Tcp.Server.close_finished server ]
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.