diff options
| author | Adelyn Breelove <[email protected]> | 2019-01-25 15:56:07 -0700 |
|---|---|---|
| committer | Adelyn Breelove <[email protected]> | 2019-01-25 15:56:07 -0700 |
| commit | bb6f6d728444936a6d810e01b2bdffe4b85c4d96 (patch) | |
| tree | 35fb88dafafe4e189adf304ce32193d9765d036d /lib/sharder.ml | |
| parent | simple corrections (diff) | |
| download | disml-bb6f6d728444936a6d810e01b2bdffe4b85c4d96.tar.xz disml-bb6f6d728444936a6d810e01b2bdffe4b85c4d96.zip | |
hopeful reconnection fix
Diffstat (limited to 'lib/sharder.ml')
| -rw-r--r-- | lib/sharder.ml | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/sharder.ml b/lib/sharder.ml index afa8965..11a6bd8 100644 --- a/lib/sharder.ml +++ b/lib/sharder.ml @@ -14,6 +14,7 @@ module Shard = struct ready: unit Ivar.t; url: string; id: int * int; + _internal: Reader.t * Writer.t; } type 'a t = { @@ -206,6 +207,9 @@ module Shard = struct | _ -> 443 in let scheme = Option.value_exn ~message:"no scheme in uri" Uri.(scheme uri) in let tcp_fun (net_to_ws, ws_to_net) = + (* Writer.monitor ws_to_net + |> Monitor.detach_and_get_error_stream + |> Stream.iter ~f:(fun e -> Logs.err (fun m -> m "Socket Connection Error: %s" (Exn.sexp_of_t e |> Sexp.to_string_hum))); *) let (app_to_ws, write) = Pipe.create () in let (read, ws_to_app) = Pipe.create () in let initialized = Ivar.create () in @@ -226,6 +230,7 @@ module Shard = struct id = shards; session = None; url; + _internal = (net_to_ws, ws_to_net); } in match Unix.getaddrinfo host (string_of_int port) [] with @@ -244,8 +249,12 @@ module Shard = struct in Conduit_async.V2.connect addr >>= tcp_fun + let shutdown_clean shard = + let (_,w) = shard._internal in + Writer.close w + let recreate shard = - print_endline "Reconnecting..."; + shutdown_clean shard >>= fun () -> create ~url:(shard.url) ~shards:(shard.id) () end @@ -310,4 +319,9 @@ let set_status_with ~f sharder = let request_guild_members ?query ?limit ~guild sharder = Deferred.all @@ List.map ~f:(fun t -> Shard.request_guild_members ~guild ?query ?limit t.state + ) sharder.shards + +let shutdown_all sharder = + Deferred.all @@ List.map ~f:(fun t -> + Shard.shutdown_clean t.state ) sharder.shards
\ No newline at end of file |