aboutsummaryrefslogtreecommitdiff
path: root/lib/sharder.ml
diff options
context:
space:
mode:
authorMishio595 <[email protected]>2018-11-29 18:10:45 -0700
committerMishio595 <[email protected]>2018-11-29 18:10:45 -0700
commiteaccd45894e5b519bca82662d0b950b5f1d9c598 (patch)
tree0d08c556ca3a0399c0be1169d5f0da57b618812b /lib/sharder.ml
parentTry to make it a more properly structured lib (diff)
downloaddisml-eaccd45894e5b519bca82662d0b950b5f1d9c598.tar.xz
disml-eaccd45894e5b519bca82662d0b950b5f1d9c598.zip
Fix all the errors from coding without merlin
Diffstat (limited to 'lib/sharder.ml')
-rw-r--r--lib/sharder.ml57
1 files changed, 28 insertions, 29 deletions
diff --git a/lib/sharder.ml b/lib/sharder.ml
index 0984050..7b14884 100644
--- a/lib/sharder.ml
+++ b/lib/sharder.ml
@@ -1,8 +1,8 @@
-open Async
-open Core
-open Websocket_async
-
module Make(H: S.Http) = struct
+ open Async
+ open Core
+ open Websocket_async
+
exception Invalid_Payload
exception Failure_to_Establish_Heartbeat
@@ -20,7 +20,7 @@ module Make(H: S.Http) = struct
}
type 'a t = {
- mutable shard: 'a;
+ mutable state: 'a;
mutable binds: ('a -> unit) list;
}
@@ -75,7 +75,7 @@ module Make(H: S.Http) = struct
session = session;
}
- let set_status ~status shard =
+ let set_status ~(status:Yojson.Basic.json) shard =
let payload = match status with
| `Assoc [("name", `String name); ("type", `Int t)] ->
`Assoc [
@@ -102,7 +102,7 @@ module Make(H: S.Http) = struct
Ivar.read shard.ready >>= fun _ ->
push_frame ~payload ~ev:STATUS_UPDATE shard
- let request_guild_members ~guild ?(query="") ?(limit=0) shard =
+ let request_guild_members ?(query="") ?(limit=0) ~guild shard =
let payload = `Assoc [
("guild_id", `String (Snowflake.to_string guild));
("query", `String query);
@@ -136,7 +136,7 @@ module Make(H: S.Http) = struct
| None -> begin
Mutex.lock identify_lock;
let payload = `Assoc [
- ("token", `String shard.token);
+ ("token", `String token);
("properties", `Assoc [
("$os", `String Sys.os_type);
("$device", `String "dis.ml");
@@ -155,7 +155,7 @@ module Make(H: S.Http) = struct
end
| Some s ->
let payload = `Assoc [
- ("token", `String shard.token);
+ ("token", `String token);
("session_id", `String s);
("seq", `Int shard.seq)
] in
@@ -183,7 +183,7 @@ module Make(H: S.Http) = struct
print_endline @@ "Invalid Opcode: " ^ Opcode.to_string opcode;
return shard
- let rec create ~url ~shards ~token () =
+ let rec create ~url ~shards () =
let open Core in
let uri = (url ^ "?v=6&encoding=json") |> Uri.of_string in
let extra_headers = H.Base.process_request_headers () in
@@ -215,7 +215,6 @@ module Make(H: S.Http) = struct
seq = 0;
id = shards;
session = None;
- token;
url;
}
in
@@ -240,46 +239,46 @@ module Make(H: S.Http) = struct
| Some hb -> Ivar.fill_if_empty hb ()
| None -> ()
);
- create ~url:(shard.url) ~shards:(shard.id) ~token:(shard.token) ()
+ create ~url:(shard.url) ~shards:(shard.id) ()
end
type t = {
shards: (Shard.shard Shard.t) list;
}
- let start ?count token =
+ let start ?count () =
let module J = Yojson.Basic.Util in
- Http.get_gateway_bot () >>= fun data ->
+ H.get_gateway_bot () >>= fun data ->
let url = J.(member "url" data |> to_string) in
let count = match count with
| Some c -> c
| None -> J.(member "shards" data |> to_int)
in
let shard_list = (0, count) in
- let rec ev_loop t =
- let (read, _) = t.shard.pipe in
+ let rec ev_loop (t:Shard.shard Shard.t) =
+ let (read, _) = t.state.pipe in
Pipe.read read
- >>| fun frame ->
- let _ = match parse frame with
+ >>= fun frame ->
+ let _ = match Shard.parse frame with
| Some f -> begin
- handle_frame ~f t.shard
+ Shard.handle_frame ~f t.state
>>> fun shard ->
- t.shard <- shard;
+ t.state <- shard;
end
- | None -> t.shard <- recreate t.shard;
+ | None -> Shard.recreate t.state >>> fun s -> t.state <- s;
in
- t
+ return t
>>= fun t ->
- List.iter ~f:(fun f -> f t.shard) t.binds;
+ List.iter ~f:(fun f -> f t.state) t.binds;
ev_loop t
in
let rec gen_shards l a =
match l with
| (id, total) when id >= total -> return a
| (id, total) ->
- Shard.create ~url ~shards:(id, total) ~token ()
+ Shard.create ~url ~shards:(id, total) ()
>>= fun shard ->
- let t = { shard; binds = []; } in
+ let t = Shard.{ state = shard; binds = []; } in
ev_loop t >>> ignore;
gen_shards (id+1, total) (t :: a)
in
@@ -289,16 +288,16 @@ module Make(H: S.Http) = struct
let set_status ~status sharder =
Deferred.all @@ List.map ~f:(fun t ->
- Shard.set_status ~status t.shard
+ Shard.set_status ~status t.state
) sharder.shards
let set_status_with ~f sharder =
Deferred.all @@ List.map ~f:(fun t ->
- Shard.set_status ~status:(f t.shard) t.shard
+ Shard.set_status ~status:(f t.state) t.state
) sharder.shards
- let request_guild_members ~guild ?query ?limit sharder =
+ let request_guild_members ?query ?limit ~guild sharder =
Deferred.all @@ List.map ~f:(fun t ->
- Shard.request_guild_members ~guild ?query ?limit t.shard
+ Shard.request_guild_members ~guild ?query ?limit t.state
) sharder.shards
end \ No newline at end of file