talircd/lib/server/router_types.ml

49 lines
1.1 KiB
OCaml

open! Import
type string_ci = Case_insensitive of string [@@unboxed]
let string_ci s = Case_insensitive (String.lowercase_ascii s)
type user = {
outbox : Outbox.t;
userinfo : userinfo;
mutable nick : name;
mutable nick_key : string_ci;
mutable user_mode : Mode.Set.t;
mutable away : string option;
mutable membership : membership Dllist.t;
}
and chan = {
name : name;
name_key : string_ci;
creation_time : Ptime.t;
mutable topic : string option * (name * Ptime.t) option;
mutable members : membership Dllist.t;
mutable member_count : int;
mutable chan_mode : Mode.Set.t; (* +imstn *)
mutable chan_limit : int option; (* +l *)
mutable chan_key : string option; (* +k *)
(* TODO: +b *)
}
and membership = {
mem_user : user;
mem_chan : chan;
mutable mem_priv : priv;
mutable mem_in_chan : membership Dllist.node option;
mutable mem_in_user : membership Dllist.node option;
}
and priv =
| Normal
| Voice
| Operator
type router = {
users : (string_ci, user) Hashtbl.t;
channels : (string_ci, chan) Hashtbl.t;
whowas : (string_ci, name * userinfo) Cache.t;
mutable lusers : int;
mutable luserchannels : int;
}