aboutsummaryrefslogtreecommitdiff
path: root/lib/client/sharder/shardManager.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/client/sharder/shardManager.ml')
-rw-r--r--lib/client/sharder/shardManager.ml32
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/client/sharder/shardManager.ml b/lib/client/sharder/shardManager.ml
new file mode 100644
index 0000000..c5919f3
--- /dev/null
+++ b/lib/client/sharder/shardManager.ml
@@ -0,0 +1,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 \ No newline at end of file