mirror of https://github.com/nealey/irc-bot
Start at using records instead of objects
This commit is contained in:
parent
9f494e9cca
commit
4ff349018d
|
@ -0,0 +1,58 @@
|
||||||
|
let ibuf_max = 4096
|
||||||
|
let max_outq = 50
|
||||||
|
let max_unsent = 4096
|
||||||
|
|
||||||
|
type client = {outq: Queue.t;
|
||||||
|
unsent: string ref;
|
||||||
|
ibuf: String;
|
||||||
|
ibuf_len: int ref;
|
||||||
|
out_ready: unit -> unit}
|
||||||
|
|
||||||
|
|
||||||
|
let new_client g fd =
|
||||||
|
let cli = {outq = Queue.create ();
|
||||||
|
unsent = ref "";
|
||||||
|
ibuf = String.create ibuf_max;
|
||||||
|
ibuf_len = ref 0;
|
||||||
|
out_ready = fun () ->
|
||||||
|
Unixqueue.add_resource g (Unixqueue.Wait_out fd, -.1.0)}
|
||||||
|
in
|
||||||
|
Unixqueue.add_resource g (Unixqueue.Wait_in fd, -.1.0);
|
||||||
|
Unixqueue.add_handler g (handle_client_event cli);
|
||||||
|
cli
|
||||||
|
|
||||||
|
|
||||||
|
let handle_client_event cli ues esys e =
|
||||||
|
match e with
|
||||||
|
| Input_arrived (g, fd) ->
|
||||||
|
let size = ibuf_max - !cli.ibuf_len in
|
||||||
|
let len = Unix.read fd cli.ibuf !cli.ibuf_len size in
|
||||||
|
if (len > 0) then
|
||||||
|
begin
|
||||||
|
cli.ibuf_len := !cli.ibuf_len + len;
|
||||||
|
try
|
||||||
|
split_client_input cli ues
|
||||||
|
with Not_found ->
|
||||||
|
if (!cli.ibuf_len = ibuf_max) then
|
||||||
|
(* No newline found, and the buffer is full *)
|
||||||
|
raise Buffer_overrun;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
|
||||||
|
handle_close ();
|
||||||
|
Unix.close fd;
|
||||||
|
ues#clear g;
|
||||||
|
end
|
||||||
|
| Output_readiness (g, fd) ->
|
||||||
|
print_endline "Output ready"
|
||||||
|
| Out_of_band (g, fd) ->
|
||||||
|
print_endline "Amy is hotttt"
|
||||||
|
| Timeout (g, op) ->
|
||||||
|
print_endline "Timeout!!!1!!1 ZOMG!"
|
||||||
|
| Signal ->
|
||||||
|
print_endline "Signal"
|
||||||
|
| Extra exn ->
|
||||||
|
print_endline "Extra"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue