Skip to content

Instantly share code, notes, and snippets.

@arjunguha
Created December 11, 2013 19:22
Show Gist options
  • Save arjunguha/7916687 to your computer and use it in GitHub Desktop.
Save arjunguha/7916687 to your computer and use it in GitHub Desktop.
Basic
open Core.Std
open Async.Std
let print_reader (reader : Reader.t) : unit Deferred.t =
Pipe.iter (Reader.lines reader)
(fun (str: string) -> printf "Read from network: %s\n%!" str; return ())
let write_lines (writer : Writer.t) : unit Deferred.t =
Pipe.iter (Reader.lines (Reader.create (Fd.stdin ())))
(fun (str : string) ->
printf "Read from stdin: %s\n%!" str;
Writer.write writer str;
Writer.write writer "\n";
Writer.flushed writer
>>| fun () ->
printf "Input: %!";
())
let service (reader : Reader.t) (writer : Writer.t) : unit Deferred.t =
Deferred.both (print_reader reader) (write_lines writer)
>>| fun _ -> ()
let _ = match Array.to_list Sys.argv with
| [ _; "serve" ] ->
Tcp.Server.create (Tcp.on_port 9999) (fun sock -> service) >>| fun _ -> ()
| [ _; "client" ] ->
Tcp.with_connection (Tcp.to_host_and_port "localhost" 9999)
(fun sock -> service)
| _ -> printf "Unknown argument.\n%!"; return ()
let _ = never_returns (Scheduler.go ())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment