49 lines
1.1 KiB
OCaml
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;
|
|
}
|