aboutsummaryrefslogtreecommitdiff
path: root/lib/client/sharder/shardManager.ml
blob: c5919f3bc32633aeaa425d31d2c363ed10f39347 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
open Lwt.Infix

module ShardSet = Set.Make(struct
    type t = Shard.t
    let compare (s1:t) (s2:t) = Pervasives.compare s1.id s2.id
end)

type t = {
    shards: ShardSet.t;
    gateway_url: Uri.t;
    token: string;
}

let create_shard ?(options=[]) manager =
    let id = (ShardSet.cardinal manager.shards) + 1 in
    Shard.connect ~_options:options ~uri:manager.gateway_url ~id ~total:(ShardSet.cardinal manager.shards) ~token:manager.token ()
    >|= fun shard ->
    ShardSet.add shard manager.shards

let update_shard manager shard =
    match ShardSet.mem shard manager.shards with
    | true -> ShardSet.add shard manager.shards
    | false -> manager.shards

let heartbeat _manager shard =
    Shard.heartbeat shard

let identify _manager shard =
    Shard.identify shard

let resume _manager shard =
    Shard.resume shard