aboutsummaryrefslogtreecommitdiff
path: root/lib/client/sharder
diff options
context:
space:
mode:
authorMishio595 <[email protected]>2018-11-04 20:20:27 -0700
committerMishio595 <[email protected]>2018-11-04 20:20:27 -0700
commit450f62a3d695a58bc66f13f77cba0f267c71dba6 (patch)
treefa7d03d987ccaa0d130f79df152ad0c8b2104de9 /lib/client/sharder
parentidek (diff)
downloaddisml-450f62a3d695a58bc66f13f77cba0f267c71dba6.tar.xz
disml-450f62a3d695a58bc66f13f77cba0f267c71dba6.zip
Major changes and refactoring
Diffstat (limited to 'lib/client/sharder')
-rw-r--r--lib/client/sharder/opcode.ml54
-rw-r--r--lib/client/sharder/shard.ml81
-rw-r--r--lib/client/sharder/shardManager.ml32
3 files changed, 0 insertions, 167 deletions
diff --git a/lib/client/sharder/opcode.ml b/lib/client/sharder/opcode.ml
deleted file mode 100644
index 2462d05..0000000
--- a/lib/client/sharder/opcode.ml
+++ /dev/null
@@ -1,54 +0,0 @@
-type t =
- | DISPATCH
- | HEARTBEAT
- | IDENTIFY
- | STATUS_UPDATE
- | VOICE_STATE_UPDATE
- | RESUME
- | RECONNECT
- | REQUEST_GUILD_MEMBERS
- | INVALID_SESSION
- | HELLO
- | HEARTBEAT_ACK
-
-exception Invalid_Opcode of int
-
-let to_int = function
- | DISPATCH -> 0
- | HEARTBEAT -> 1
- | IDENTIFY -> 2
- | STATUS_UPDATE -> 3
- | VOICE_STATE_UPDATE -> 4
- | RESUME -> 6
- | RECONNECT -> 7
- | REQUEST_GUILD_MEMBERS -> 8
- | INVALID_SESSION -> 9
- | HELLO -> 10
- | HEARTBEAT_ACK -> 11
-
-let from_int = function
- | 0 -> DISPATCH
- | 1 -> HEARTBEAT
- | 2 -> IDENTIFY
- | 3 -> STATUS_UPDATE
- | 4 -> VOICE_STATE_UPDATE
- | 6 -> RESUME
- | 7 -> RECONNECT
- | 8 -> REQUEST_GUILD_MEMBERS
- | 9 -> INVALID_SESSION
- | 10 -> HELLO
- | 11 -> HEARTBEAT_ACK
- | op -> raise (Invalid_Opcode op)
-
-let to_string = function
- | DISPATCH -> "DISPATCH"
- | HEARTBEAT -> "HEARTBEAT"
- | IDENTIFY -> "IDENTIFY"
- | STATUS_UPDATE -> "STATUS_UPDATE"
- | VOICE_STATE_UPDATE -> "VOICE_STATE_UPDATE"
- | RESUME -> "RESUME"
- | RECONNECT -> "RECONNECT"
- | REQUEST_GUILD_MEMBERS -> "REQUEST_GUILD_MEMBER"
- | INVALID_SESSION -> "INVALID_SESSION"
- | HELLO -> "HELLO"
- | HEARTBEAT_ACK -> "HEARTBEAT_ACK" \ No newline at end of file
diff --git a/lib/client/sharder/shard.ml b/lib/client/sharder/shard.ml
deleted file mode 100644
index 7be4aad..0000000
--- a/lib/client/sharder/shard.ml
+++ /dev/null
@@ -1,81 +0,0 @@
-open Lwt.Infix
-open Websocket
-
-type t = {
- send: (Frame.t -> unit Lwt.t);
- id: int;
- total_shards: int;
- hb_interval: int;
- session_id: string;
- seq: int;
- token: string;
-}
-
-let init ?(hb_interval=42500) ?(session_id="") ?(seq=0) ~send ~id ~total_shards ~token () =
- { send; id; total_shards; hb_interval; session_id; seq; token; }
-
-let push_frame shard frame =
- shard.send frame
-
-let process_frame shard frame =
- let json = frame |> Yojson.Basic.from_string in
- match json with
- | `Assoc [("s", `Int _s); ("d", _d); ("t", `String _t); ("op", `Int op);] -> begin
- match op |> Opcode.from_int with
- | DISPATCH -> () (* dispatch t d Need to write the dispatcher and other ops *)
- | HEARTBEAT -> ()
- | IDENTIFY -> ()
- | STATUS_UPDATE -> ()
- | VOICE_STATE_UPDATE -> ()
- | RESUME -> ()
- | RECONNECT -> ()
- | REQUEST_GUILD_MEMBERS -> ()
- | INVALID_SESSION -> ()
- | HELLO -> ()
- | HEARTBEAT_ACK -> ()
- |> ignore;
- (* { shard with seq = s; } *)
- end
- | _ -> shard
-
-let wrap_payload d op =
- `Assoc [
- ("op", `Int op);
- ("d", d)
- ]
-
-let create_frame content =
- Frame.create ~content ()
-
-let identify ?(threshold=250) shard=
- let p = wrap_payload (`Assoc [
- ("token", `String shard.token);
- ("properties", `Assoc [
- ("$os", `String Sys.os_type);
- ("$browser", `String "animus");
- ("$device", `String "animus");
- ]);
- ("large_threshold", `Int threshold);
- ("shard", `List [`Int shard.id; `Int shard.total_shards]);
- ]) (Opcode.to_int IDENTIFY) in
- push_frame shard (Yojson.Basic.to_string p |> create_frame)
-
-let resume shard =
- let p = wrap_payload (`Assoc [
- ("token", `String shard.token);
- ("session_id", `String shard.session_id);
- ("seq", `Int shard.seq);
- ]) (Opcode.to_int RESUME) in
- push_frame shard (Yojson.Basic.to_string p |> create_frame)
-
-let heartbeat shard =
- let p = wrap_payload (`Int shard.seq) (Opcode.to_int HEARTBEAT) in
- push_frame shard (Yojson.Basic.to_string p |> create_frame)
-
-let connect ~_options ~uri ~id ~total ~token () =
- let url = uri |> Uri.to_string in
- let ip = Ipaddr.V4 Ipaddr.V4.any in
- let client = Websocket.Connected_Client.create
- Websocket_lwt.with_connection (`TLS (`Hostname url, `IP ip, `Port 443)) uri (* Maybe use upgrade_connection? *)
- >|= fun (recv, send) ->
- init ~send ~id ~token ~total_shards:total () \ No newline at end of file
diff --git a/lib/client/sharder/shardManager.ml b/lib/client/sharder/shardManager.ml
deleted file mode 100644
index c5919f3..0000000
--- a/lib/client/sharder/shardManager.ml
+++ /dev/null
@@ -1,32 +0,0 @@
-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