aboutsummaryrefslogtreecommitdiff
path: root/lib/client/sharder/shard_manager.ml
diff options
context:
space:
mode:
authorLyn Breedlove <[email protected]>2018-10-26 16:17:23 -0600
committerLyn Breedlove <[email protected]>2018-10-26 16:17:23 -0600
commit9d7cac5da110250539d1ae139cb159425b0e67b1 (patch)
tree90f92553ac205f466aabb4c1129212c2660248d2 /lib/client/sharder/shard_manager.ml
parenta few (possibly bad) updates (diff)
downloaddisml-9d7cac5da110250539d1ae139cb159425b0e67b1.tar.xz
disml-9d7cac5da110250539d1ae139cb159425b0e67b1.zip
More random stuff with sharding
Diffstat (limited to 'lib/client/sharder/shard_manager.ml')
-rw-r--r--lib/client/sharder/shard_manager.ml31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/client/sharder/shard_manager.ml b/lib/client/sharder/shard_manager.ml
new file mode 100644
index 0000000..68b3d13
--- /dev/null
+++ b/lib/client/sharder/shard_manager.ml
@@ -0,0 +1,31 @@
+open Lwt.Infix
+open Websocket
+
+module ShardSet = Set.Make(Shard)
+
+type t = {
+ shards: Shard.t ShardSet.t;
+ gateway_url: Uri.t;
+ token: string;
+}
+
+let create_shard ?(options=[]) manager =
+ let id = (ShardSet.cardinal manager.shards) + 1 in
+ Shard.connect ~options ~uri:manager.gateway_url ~id ~total:(ShardSet.cardinal manager.shards) ~token:manager.token ()
+ >|= fun shard ->
+ ShardSet.add shard manager.shards
+
+let update_shard shard manager =
+ match ShardSet.mem shard manager.shards with
+ | true -> ShardSet.add shard manager.shards
+ | false -> manager.shards
+
+let heartbeat shard manager =
+ Shard.heartbeat shard
+
+let identify shard manager =
+ let total = ShardSet.cardinal manager.shards in
+ Shard.identify total manager.token shard
+
+let resume shard manager =
+ Shard.resume manager.token shard \ No newline at end of file